0

双方向の関係を持つ 2 つの JPA エンティティ (Account と Person) があります。

@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);
    ...
}

Person を永続化する場合、すべてのアカウントを永続化する必要はありませんが、アカウントを永続化するときに、個人のプロパティ hasAccounts を更新する必要があるため、個人も更新する必要があります。

次の手順を実行します。

  • 人物を作成する
  • 人を固執する
  • アカウントを作成する
  • 所有者を変更します (以前に作成した
  • アカウントを永続化します (そして、自動的に Person がマージされることを願っています)
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

(私は Hibernate で JPA 1.0 を使用しています)。

4

1 に答える 1