我對使用Hibernate時一對多/多對一關係的正確選擇的正確選擇有點困惑。 我可以想象這種關係的兩個例子:用於一對多/多對一關係的休眠設置
- Order/OrderLine對是第一個例子。在這對訂單中有'主'角色。人們想要保存訂單,因此保存所有的項目。
- 組/用戶是第二個例子。在這對中,用戶具有「主」角色。人們更傾向於通過將用戶分配給某個組來保存用戶。
的兩個實施例中的內部結構是相同的,如果我們抽象遠離細節,如在
public class Order/Group implements Serializable {
private Integer id;
private Set<OrderLine/User> children = new HashSet<OrderLine/User>();
}
public class OrderLine/User implements Serializable {
private Integer id;
private Order/Group parent;
}
的休眠註釋映射將分別
@OneToMany(mappedBy = "parent")
@ManyToOne
@JoinColumn(name = "id", nullable = false)
邏輯離去訂單行/用戶擁有方。
上述用例是否對擁有方的關係選擇產生影響?一個人反過來擁有或保存/刪除父級與級聯選項就足夠了?添加/刪除一些孩子是否正常,然後用orphanRemoval
(訂單 - 訂單行)還是沒有它(組 - 用戶)將父母持續保存到數據庫?最後,哪一方應該對某些行爲負責,例如在清理組中的用戶時保持現狀,或者通過添加和刪除項目來更改訂單?
所以在這種情況下,如果我想通過擁有方來管理對象,我會在所有想要保存/更新的孩子中設置合適的父字段,並將父字段設置爲null我想刪除的孩子,相應地重新排列父母中的孩子的列表/集合,並將保存父母,我可以確定這將是一個很好的編程習慣,不會產生不必要的東西,對吧? – skuntsel
我想,是的。很難說沒有特定的用例和代碼。如果您使用連接的實體,則不需要保存任何內容。只需修改實體的狀態,並且更改將自動保持。 –