2012-05-16 155 views
0

我有兩個JPA實體(帳戶和人),具有雙向關係: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)。

+0

JPA1.2不存在。 JPA 1.0? JPA 2.0? – DataNucleus

+0

對不起,我的錯。 JPA 1.0是我使用的版本。 (我在考慮JSF 1.2) –

回答

0

嘗試以下操作:

Person p = new Person(); 
Account a = new Account(); 

p.getComments().add(a); 
p.setHasAccounts('Y'); 

em.persist(p);