2012-04-25 170 views
1

我使用hibertnate和JPA創建應用程序。我有兩個班,分別是Person和Associate。由於人們擁有一個人的細節(姓名,性別等),所以這個人很自我解釋。助理是一個將2個人物連接在一起的人(人與人B排成一行),有點像Facebook上的「朋友」。非常簡單,一個人(A人)擁有一個同事名單,而一個同伴對象則持有另一個人(B人)被關聯以及他們擁有的關係類型(朋友,家人等)。這樣,人A可以知道他/她與誰相關聯(即,人A知道他與人B相關聯)。結構受到打擊。休眠 - 刪除對象引用而不刪除對象

假設發生的事情是,當一個人從數據庫中被刪除時,他的所有關聯也會被刪除。這是被刪除的人和與其他人的鏈接。問題是,當我在Person類中使用級聯刪除時,它會刪除關聯PLUS關聯對象中的所有人員對象。即,如果A人和B人相關聯(在相關對象中)。當人A被刪除時,關聯對象被刪除以及人B,期望的結果是隻有人A和關聯對象參考人A被刪除,而非人B。人B對象應該作爲人留在數據庫中B還沒有被刪除,只是2人之間的關聯。我不知道該怎麼做。任何想法如何我可以實現預期的結果?或者如果有更好的方法來做這個2人物的關聯。


  • 結構:

Person類

@Entity

公共類Person實現Serializable {

private Long id; 
private String firstName; 
private String lastName; 
private String gender; 
@OneToMany (cascade = {CascadeType.ALL}) 
@Cascade({CascadeType.SAVE_UPDATE, CascadeType.DELETE}) 
@JoinColumn(name = "person_id") 
private List<Associate> associations; 

//setters 
//getters 

}

爲類 @Entity

公共類大專實現Serializable {

private Long id; 
@ManyToOne 
private Person associate; 
private String relationshipType; 
@OneToOne (cascade = {CascadeType.ALL}) 
@Cascade({CascadeType.SAVE_UPDATE, CascadeType.DELETE}) 
private AssociateSettings; 

//setters 
//getters 

}

回答

0

創建只有一個實體 - 人 - 這是素描類:

@Entity 
public class Person{ 

private Long id; 
private String firstName; 
private String lastName; 
private String gender; 
@OneToMany 
private List<Person> associates; 

//setters 
//getters 
} 

每個人都可以與其他人的收集有關。不要使用級聯刪除,因爲只需刪除一個人即可輕鬆刪除一半數據庫。

+0

感謝您的回覆。我想過這樣做,但我也需要跟蹤其他數據,如2人(朋友,家人同事等)之間的關係。因此,在清單中,每個人與清單持有者都有不同的關係。你知道我能用上面給出的結構來做到嗎?我目前看不到有辦法做到這一點。 – rodmen88 2012-04-26 10:16:07

+1

好吧...而不是創建一個單一的「夥伴」列表,爲每個關係創建一個列表:朋友,家人,牛商人等...... – 2012-04-27 20:04:56

+1

這也可以工作。儘管我已經想出了一個解決方案。而不是將人員對象存儲在員工類別中,我只會存儲相關人員的ID。換句話說,我只是將Associate(在關聯類中)的數據類型從Person更改爲Long,並將人員的ID存儲在associate屬性下。這樣,我不僅可以級聯刪除,也不會刪除實際的人員,但我也可以只在需要時才能檢索該人員的全部詳細信息。感謝大家的幫助和投入。 – rodmen88 2012-04-30 09:53:20