在基於Spring/Hibernate的項目中,我們在兩個實體之間有一對多的關係。需要的操作是:應該避免Hibernate雙向關聯?
- 找到孩子的父母;
- 找到父母的孩子;
- 當父母被刪除時,我們也需要刪除孩子;
- 大衆創造孩子。
我們想出了兩種實現方法。
Bidirectional association:子實體具有
@ManyToOne
柱連接起來,父母,和家長有孩子的@OneToMany
延遲加載集合。以上所有操作都可以在模型中進行:child.getParent(); parent.getChildren(); //lazy loading session.delete(parent); //cascade removal of the children does the trick here session.save(parent); //cascade persist created the children
單向協會:子實體具有
@ManyToOne
列其鏈接到父,但父沒有任何鏈接到孩子。大多數操作應該在服務方法進行:child.getParent(); //still in the model Collection<Child> findChildren(Parent parent); //service method in ChildService void deleteChildren(Parent parent); //service method in ChildService void createChild(Parent parent, ... childAttributes); //service method in ChildService invoked for each new child.
第一種方法似乎更容易實現(你可以重複使用Hibernate的級聯功能),但我們中的一些看到的雙向關聯的問題的潛在原因。
什麼應該是更好的設計選擇?是否有任何由雙向方法創造的衆所周知的問題,表現或設計?
你知道一個解釋如何讓lazyloading工作的源代碼嗎?我在JSF項目中遇到了麻煩。 –
「我們中的一些人將雙向關聯視爲問題的潛在原因」 - 您能否說出這些潛在問題? –