2013-11-25 43 views
0

我有2周的entites具有獨立父休眠多對多關係

1)提名 對於提名管理我有單獨的UI和操作,也是本提名被其他模塊使用,也像貸款等所以它並沒有任何映射關係。

2)保險,其中有這樣

@ManyToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY) 
@JoinTable(name = "INSURANCE_NOMINEE", joinColumns = { @JoinColumn(name = "INSURANCE_ID") }, inverseJoinColumns = { @JoinColumn(name = "NOMINEE_ID") }) 
public Set<Nominee> getNomineeList() { 
    return nomineeList; 
} 

public void setNomineeList(Set<Nominee> nomineeList) { 
    this.nomineeList = nomineeList; 
} 

代碼我有保存保險這樣的代碼

Insurance insurance = buildInsuranceDomain(insuranceForm); 
getHibernateTemplate().merge(insurance); 

這工作得很好,因爲它插入記錄到保險和Insurance_Nominee表。

但是,當我試圖刪除這個保險記錄,它會刪除提名錶中記錄爲好,但是這不應該發生,因爲這被提名人在其他模塊以及像貸款使用等

刪除代碼如下所示

getHibernateTemplate()。delete(insurance);

那麼如何在保險領域實體中指定這種關係呢?

+0

你有沒有真正嘗試過嗎?我期望刪除保險實例將刪除該記錄和連接表中的任何鏈接,但如果完全接受提名錶,則會感到非常驚訝。 –

回答

0

Insurance

@ManyToMany(cascade = CascadeType.MERGE, fetch = FetchType.LAZY) 
@JoinTable(name = "INSURANCE_NOMINEE", joinColumns = { @JoinColumn(name = "INSURANCE_ID") }, inverseJoinColumns = { @JoinColumn(name = "NOMINEE_ID") }) 

Nominee

@ManyToMany(cascade = CascadeType.MERGE, fetch = FetchType.LAZY) 
    @JoinTable(name = "INSURANCE_NOMINEE", joinColumns = { @JoinColumn(name = "NOMINEE_ID") }, inverseJoinColumns = { @JoinColumn(name = "INSURANCE_ID") }) 
public Set<Insurance> getInsuranceList() { 
    return insuranceList; 
} 
0

在映射

@ManyToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY) @JoinTable(name = "INSURANCE_NOMINEE", joinColumns = { @JoinColumn(name = "INSURANCE_ID")}, inverseJoinColumns = { @JoinColumn(name = "NOMINEE_ID")}) 
要定義級聯選項,這將挽救孩子記錄automatically.Same情況下

時刪除過上刪除,它會調用級聯刪除,這將當父刪除相關記錄記錄被刪除。

你不能指望沒有父母的孩子。

+0

哪個Cascade Option可以解決這個問題? –

+0

根據我對你的問題的理解,你必須堅持孩子的價值,但它是不可能的。刪除父母,孩子將被刪除。如果你想要堅持這個價值,然後刪除兩個表的鏈接。沒有父母沒有孩子。 – dev