JPA / Ruhezustand: Die getrennte Entität wurde übergeben, um fortzufahren

Ich habe ein JPA-beständiges Objektmodell, das eine 1: 1-Beziehung enthält: Ein Konto verfügt über viele Transaktionen. Eine Transaktion hat ein Konto.

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 Kontoobjekt erstellen, Transaktionen hinzufügen und das Kontoobjekt ordnungsgemäß beibehalten. Aber wenn ich eine Transaktion erstelle,Verwenden eines vorhandenen, bereits vorhandenen Kontosund das Fortbestehen derdie TransaktionIch bekomme eine Ausnahme:

Caused by: org.hibernate.PersistentObjectException: detached entity passed to persist: com.paulsanwald.Account
    at org.hibernate.event.internal.DefaultPersistEventListener.onPersist(DefaultPersistEventListener.java:141) 

Ich kann also ein Konto beibehalten, das Transaktionen enthält, aber keine Transaktion, die über ein Konto verfügt. Ich dachte, das liegt daran, dass der 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 eine Transaktion, die mit einem bereits vorhandenen Kontoobjekt verknüpft ist, korrekt speichern?

Antworten auf die Frage(13)

Ihre Antwort auf die Frage