Mam model obiektów utrwalony przez JPA, który zawiera relację wiele do jednego: Account
ma wiele Transactions
. A Transaction
ma jeden Account
.
Oto fragment kodu:
@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;
Jestem w stanie utworzyć Account
obiekt, dodać do niego transakcje i Account
poprawnie utrwalić obiekt. Ale kiedy tworzę transakcję, używając istniejącego już utrwalonego Konta i utrwalając Transakcję , otrzymuję wyjątek:
Przyczyna: org.hibernate.PersistentObjectException: odłączony byt przekazany do trwałego: com.paulsanwald.Account at org.hibernate.event.internal.DefaultPersistEventListener.onPersist (DefaultPersistEventListener.java:141)
Tak więc jestem w stanie utrzymać Account
transakcję zawierającą transakcje, ale nie transakcję zawierającą transakcję Account
. Myślałem, że dzieje się tak, ponieważ Account
może nie być dołączony, ale ten kod wciąż daje mi ten sam wyjątek:
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);
Jak mogę poprawnie zapisać obiekt Transaction
powiązany z już utrwalonym Account
obiektem?