У мене є об'єктна модель, що зберігається в JPA, яка містить відносини "багато в одному": " Accountє багато" Transactions. A 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);
Як я можу правильно зберегти об'єкт Transaction, пов’язаний із уже збереженим Accountоб'єктом?