我有一个包含多对一关系的 JPA 持久对象模型:一个Account
有很多Transactions
. ATransaction
有一个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
包含事务的事务,但不能持久化一个具有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
对象关联的 , ?