ฉันมีรูปแบบวัตถุ JPA-ยืนกรานที่มีหลายต่อหนึ่งความสัมพันธ์: การมีจำนวนมากAccount
มีหนึ่งTransactions
Transaction
Account
นี่คือตัวอย่างของรหัส:
@Entity
public class Transaction {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
@ManyToOne(cascade = {CascadeType.ALL},fetch= FetchType.EAGER)
private Account fromAccount;
....
@Entity
public class Account {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
@OneToMany(cascade = {CascadeType.ALL},fetch= FetchType.EAGER, mappedBy = "fromAccount")
private Set<Transaction> transactions;
ฉันสามารถสร้างAccount
วัตถุเพิ่มธุรกรรมไปยังAccount
วัตถุนั้นและคงวัตถุไว้อย่างถูกต้อง แต่เมื่อฉันสร้างธุรกรรมโดยใช้บัญชีที่มีอยู่แล้วและยืนยันการทำธุรกรรมฉันจะได้รับข้อยกเว้น:
เกิดจาก: org.hibernate.PersistentObjectException: เอนทิตีเดี่ยวที่ส่งผ่านไปยังคงอยู่: com.paulsanwald.Account ที่ org.hibernate.event.internal.DefaultPersistEventListener.onPersist (DefaultPersistEventListener.java:141)
ดังนั้นฉันสามารถที่จะยังคงมีอยู่Account
ที่มีการทำธุรกรรม Account
แต่ไม่ได้ทำธุรกรรมที่มี ฉันคิดว่าเป็นเพราะAccount
อาจจะไม่ได้แนบ แต่รหัสนี้ยังให้ฉันข้อยกเว้นเดียวกัน:
if (account.getId()!=null) {
account = entityManager.merge(account);
}
Transaction transaction = new Transaction(account,"other stuff");
// the below fails with a "detached entity" message. why?
entityManager.persist(transaction);
ฉันจะบันทึก a ที่Transaction
เกี่ยวข้องกับAccount
วัตถุที่คงอยู่แล้วได้อย่างถูกต้องได้อย่างไร?