單向關聯和雙向關聯有什么區別?由于在數據庫中生成的表都是相同的,所以我發現的唯一區別是雙向關聯的每一側都有一個引用,而單向則沒有。這是單向關聯public class User { private int id; private String name; @ManyToOne @JoinColumn( name = "groupId") private Group group;}public class Group { private int id; private String name;}雙向關聯public class User { private int id; private String name; @ManyToOne @JoinColumn( name = "groupId") private Group group;}public class Group { private int id; private String name; @OneToMany(mappedBy="group") private List<User> users;}區別在于該組是否持有用戶的參考。所以我想知道這是否是唯一的區別?哪個推薦?java hibernate jpa orm 關聯
3 回答

胡說叔叔
TA貢獻1804條經驗 獲得超8個贊
有兩個主要區別。
訪問關聯方
第一個與您如何訪問關系有關。對于單向關聯,您只能從一端導航關聯。
因此,對于單向@ManyToOne
關聯,這意味著您只能從外鍵所在的子端訪問該關系。
如果您具有單向@OneToMany
關聯,則意味著您只能從外鍵所在的父側訪問該關系。
對于雙向@OneToMany
關聯,您可以通過兩種方式從父方或子方導航關聯。
您還需要對雙向關聯使用添加/刪除實用程序方法,以確保雙方正確同步。
性能
第二方面與性能有關。
因為
@OneToMany
,單向關聯的效果不如雙向關聯。對于
@OneToOne
,雙向關聯,將導致母公司要獲取熱切如果Hibernate無法告訴代理是否應該分配或空值。因為
@ManyToMany
,集合類型的Sets
表現優于集合,產生了很大的變化Lists
。

暮色呼如
TA貢獻1853條經驗 獲得超9個贊
在編碼方面,雙向關系的實現更加復雜,因為根據JPA規范5(第42頁),應用程序負責使雙方保持同步。不幸的是,規范中給出的示例沒有提供更多細節,因此也沒有給出復雜程度的概念。
當不使用二級緩存時,正確執行關系方法通常不是問題,因為在事務結束時實例將被丟棄。
使用二級緩存時,如果由于錯誤實施的關系處理方法而導致任何內容損壞,這意味著其他事務也將看到損壞的元素(二級緩存是全局的)。
正確實現的雙向關系可以使查詢和代碼更簡單,但如果就業務邏輯而言確實沒有意義,則不應使用。
添加回答
舉報
0/150
提交
取消