PersistentObjectException: 分離されたエンティティが JPA と Hibernate によってスローされ、永続化に渡されました 質問する

PersistentObjectException: 分離されたエンティティが JPA と Hibernate によってスローされ、永続化に渡されました 質問する

多対 1 の関係を含む JPA 永続オブジェクト モデルがあります。 にはAccount多数の があり、TransactionsにはTransaction1 つの があります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 を使用してAccountトランザクションを作成し、Transaction を永続化すると、例外が発生します。

原因: org.hibernate.PersistentObjectException: 分離されたエンティティが永続化に渡されました: com.paulsanwald.Account at org.hibernate.event.internal.DefaultPersistEventListener.onPersist(DefaultPersistEventListener.java:141)

したがって、トランザクションを含む を永続化することはできますAccountが、 を持つ Transaction を永続化することはできません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?

ベストアンサー1

解決方法は簡単です。またはCascadeType.MERGEの代わりにを使用するだけです。CascadeType.PERSISTCascadeType.ALL

私も同じ問題を抱えていましたが、CascadeType.MERGEうまくいきました。

うまく解決したことを祈っています。

おすすめ記事