我使用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
}
感謝您的回覆。我想過這樣做,但我也需要跟蹤其他數據,如2人(朋友,家人同事等)之間的關係。因此,在清單中,每個人與清單持有者都有不同的關係。你知道我能用上面給出的結構來做到嗎?我目前看不到有辦法做到這一點。 – rodmen88 2012-04-26 10:16:07
好吧...而不是創建一個單一的「夥伴」列表,爲每個關係創建一個列表:朋友,家人,牛商人等...... – 2012-04-27 20:04:56
這也可以工作。儘管我已經想出了一個解決方案。而不是將人員對象存儲在員工類別中,我只會存儲相關人員的ID。換句話說,我只是將Associate(在關聯類中)的數據類型從Person更改爲Long,並將人員的ID存儲在associate屬性下。這樣,我不僅可以級聯刪除,也不會刪除實際的人員,但我也可以只在需要時才能檢索該人員的全部詳細信息。感謝大家的幫助和投入。 – rodmen88 2012-04-30 09:53:20