在我的專案中,我有這樣的事情:
@Entity
public class Refund {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@ManyToOne(fetch = FetchType.LAZY)
private Payment payment;
// ... other fields...
}
@Entity
public class Payment {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@OneToMany(orphanRemoval = true, cascade = CascadeType.ALL, mappedBy = "payment")
private List<Refund> refunds;
// ... other fields...
}
Payment是聚合根,當我需要添加一個新的時,Refund我使用這個邏輯:
Payment payment = // fetch or create a Payment
Refund refund = // create populate new Refund
refund.setPayment(payment);
payment.getRefunds().add(refund);
paymentRepository.save(payment); // <= here I'm using a Spring Data JPA repository
保存后payment,我想檢索新創建的 id Refund,但該id欄位未在refund實體中填充。
筆記
- 實作保存邏輯的方法用 注釋
@Transactional。 - 我也嘗試使用 repo
saveAndFlush方法,但沒有任何改變......
有沒有辦法做到這一點?
uj5u.com熱心網友回復:
您需要確保在呼叫 save 方法時更新支付物件。您需要做的是更新到以下內容:
payment = paymentRepository.save(payment);
在此之后,您應該能夠看到設定的 ID 等。
uj5u.com熱心網友回復:
paymentRepository.save(支付)
應該回傳保存的實體付款。
從那里您可以訪問您的退款并獲取 ID。
uj5u.com熱心網友回復:
id 在從 回傳的值上可用save。在您的情況下,合并操作級聯到退款集合,并且更新的退款將在退回付款的集合中可用。
話雖如此,如果您的目標只是向資料庫添加退款,您可能更愿意保存退款 - 它是關系的擁有方。
有關CrudRepository.save,請參閱 javadoc
<S extends T> S save(S entity)保存給定的物體。使用回傳的實體進行進一步的操作,因為保存操作可能已經完全改變了物體實體。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/456134.html
