Ho un modello a oggetti persistente JPA che contiene una relazione molti-a-uno: uno ne Account
ha molti Transactions
. A ne Transaction
ha uno Account
.
Ecco uno snippet del codice:
@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;
Sono in grado di creare un Account
oggetto, aggiungere transazioni ad esso e persistere Account
correttamente l' oggetto. Ma, quando creo una transazione, usando un Conto già persistente esistente e persistendo la Transazione , ottengo un'eccezione:
Causato da: org.hibernate.PersistentObjectException: entità distaccata passata a persistere: com.paulsanwald.Account su org.hibernate.event.internal.DefaultPersistEventListener.onPersist (DefaultPersistEventListener.java:141)
Quindi, sono in grado di persistere in un file Account
contenente transazioni, ma non in una Transazione con un Account
. Pensavo che ciò fosse dovuto al fatto che Account
potrebbe non essere allegato, ma questo codice mi dà ancora la stessa eccezione:
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);
Come posso salvare correttamente un Transaction
, associato a un Account
oggetto già persistente ?