我有两个 JPA 实体(帐户和人员),具有双向关系:
@Entity
@Table(name = "ACCOUNTS")
@DataCache(enabled = false)
public class Account
{
....
@ManyToOne(fetch = FetchType.LAZY, cascade = CascadeType.ALL)
@JoinColumn(name = "ID_OWNER", nullable = false)
private Person owner;
...
}
@Entity
@Table(name = "OWNERS")
@DataCache(enabled = false)
public class Person {
...
@Column(name = "HAS_ACCOUNTS", nullable = false, columnDefinition = "CHAR(1)")
private char hasAccounts;
@OneToMany(mappedBy = "owner")
private Set<Accpunt> comments = new LinkedHashSet<Account>(3);
...
}
当我持久化一个人时,我不想持久化所有帐户,但是当我持久化一个帐户时,我想更新人员属性 hasAccounts,因此我还需要更新人员。
我做了以下步骤:
- 创建一个人
- 坚持这个人
- 创建一个帐户
- 修改所有者(之前创建的
- 持久化帐户(我希望它会自动合并人员)
Person p = new Person();
em.persist(p);
Account a = new Account();
a.setOwner(p);
p.setHasAccounts('Y');
em.persist(a);
我得到了这个例外:
javax.ejb.EJBTransactionRolledbackException: org.hibernate.PersistentObjectException: detached entity passed to persist: Person
(我将 JPA 1.0 与 Hibernate 一起使用)。