JPA/Hibernate:传递给持久化的分离实体
我有一个JPA持久化的对象模型,它包含一个多对一的关系:一个帐户有许多事务。交易只有一个帐户。
下面是代码片段:@Entitypublic class Transaction {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
@ManyToOne(cascade = {CascadeType.ALL},fetch= FetchType.EAGER)
private Account fromAccount;....@Entitypublic class Account {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
@OneToMany(cascade = {CascadeType.ALL},fetch= FetchType.EAGER, mappedBy = "fromAccount")
private Set transactions;
我能够创建一个帐户对象,向它添加事务,并正确地持久化帐户对象。但是,当我创建一个交易时,使用现有的已持久化帐户,并坚持交易我有个例外:Caused by: org.hibernate.PersistentObjectException: detached entity passed to persist: com.paulsanwald.Account
at org.hibernate.event.internal.DefaultPersistEventListener.onPersist(DefaultPersistEventListener.java:141)
因此,我能够持久化一个包含事务的帐户,而不是一个有帐户的事务。我认为这是因为帐户可能没有附加,但这段代码仍然给了我同样的例外: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);
如何正确保存与已持久化帐户对象关联的事务?