Ich habe ein JPA-beständiges Objektmodell, das eine Viele-zu-Eins-Beziehung enthält: Ein Account
hat viele Transactions
. A Transaction
hat einen Account
.
Hier ist ein Ausschnitt aus dem Code:
@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;
Ich kann ein Account
Objekt erstellen , Transaktionen hinzufügen und das Account
Objekt korrekt beibehalten. Wenn ich jedoch eine Transaktion erstelle, ein bereits bestehendes Konto verwende und die Transaktion beibehalten habe , erhalte ich eine Ausnahme:
Auslöser: org.hibernate.PersistentObjectException: Abgetrennte Entität, die an persist übergeben wurde: com.paulsanwald.Account at org.hibernate.event.internal.DefaultPersistEventListener.onPersist (DefaultPersistEventListener.java:141)
Ich kann Account
also eine Transaktion beibehalten , die Transaktionen enthält, aber keine Transaktion mit einer Account
. Ich dachte, das lag daran, dass das Account
möglicherweise nicht angehängt ist, aber dieser Code gibt mir immer noch die gleiche Ausnahme:
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);
Wie kann ich ein Transaction
mit einem bereits persistierten Account
Objekt verknüpftes Objekt korrekt speichern ?