多対一の関係を含む JPA 永続オブジェクト モデルがあります: an Account
has many Transactions
。ATransaction
は 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: 切り離されたエンティティが永続化に渡されました: org.hibernate.event.internal.DefaultPersistEventListener.onPersist(DefaultPersistEventListener.java:141) の com.paulsanwald.Account
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