2011-02-24 27 views
2

我已經在我的實體關係中設置了CascadeType.ALL,但它在我堅持一個實體時部分工作。Cascade Type.ALL不工作

例: `會員單位:

@OneToMany(mappedBy="member", cascade={CascadeType.ALL}) 
private List<ContactInfo> contactInfos; 

和的ContactInfo實體:

@ManyToOne 
@JoinColumn(name="MEMBERID") 
private Member member; 

`

Member細節也ContactInfo數據持久化。但是Member.IdContactInfo表中沒有更新,因爲我在ContactInfo表中有可空的外鍵限制。

我該如何讓JPA自動更新ContactInfo中的Member.Id並且每當我堅持會員?

問候,

薩蒂亞

+0

無論我嘗試,沒有什麼工作。任何建議都會有很大的幫助。我使用Hibernate實現並且不使用hibernate會話進行持久化,所以希望CascadeType.ALL可以工作。 – Satya 2011-02-26 18:57:01

+0

也許您可以將您的Member.Id聲明與註釋一起發佈,以便我們可以更好地瞭解您的問題?另外,請解釋爲什麼您需要更新Id字段? Id字段是成員實體的主鍵嗎? – bertie 2011-03-22 17:02:20

回答

2

如果使用CascadeType.ALL只級聯中的ContactInfo的成員,那麼該成員是擁有方。您必須刪除mappedby,複製@JoinColumn信息並將@ManyToOne端視爲不可插入和不可更新。這會告訴休眠時,保存MEMBER時必須更新CONTACTINFO的MEMBERID。

這裏是映射:

會員單位:

@OneToMany 
@JoinColumn(name="MEMBERID") //we need to duplicate the physical information 
private List<ContactInfo> contactInfos; 

聯繫單位:

@ManyToOne 
@JoinColumn(name="MEMBERID", insertable=false, updatable=false) 
private Member member; 

Reference Hibernate Section 2.2.5.3.1.1

+2

差不多一年後...是的,只要我找到時間,我一定會試試這個。非常感謝更新和鏈接:) – Satya 2012-02-06 03:55:42