私は、多対1の関係が含まれているJPA永続化オブジェクトモデルを持っている:Account
多くを持っていますTransactions
。あTransaction
に1つあり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
オブジェクトを正しく永続化できます。しかし、トランザクションを作成するときは、既存の永続化されたアカウントを使用して、トランザクションを永続化します、私は例外を取得します:
原因:org.hibernate.PersistentObjectException:永続化のために渡された分離エンティティ:com.paulsanwald.Account at org.hibernate.event.internal.DefaultPersistEventListener.onPersist(DefaultPersistEventListener.java:141)
したがって、Account
トランザクションを含むを永続化できますが、を含むトランザクションは永続化できません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
オブジェクトに関連付けられているを正しく保存するにはどうすればよいですか?