나는 대일 관계를 포함하는 JPA-지속 객체 모델이 있습니다이 Account
많이 있습니다 Transactions
. A Transaction
는 하나가 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
객체 와 관련된를 올바르게 저장하려면 어떻게해야 합니까?