Hibernate 補充 ManyToOne、OneToMany、OneToOne的使用例
阿新 • • 發佈:2018-11-19
1、前言
Hibernate 為程式設計師提供一種級聯操作,在編寫程式時,通過 Hibernate 的級聯功能可以很方便的操作資料庫的主從表的資料, 我們最常用的級聯是級聯儲存和級聯刪除。2、ManyToOne | OneToMany 單詞誤導
當我們去試用的時候,首先要明確級聯關係,是一對多,還是多對一,還是一對一, 明確了這一點還不夠,還要清楚是誰一對多,誰多對一,這樣才能更好地去應用上邊的這兩個註解:ManyToOne OneToMany 記憶公式:第一個單詞就是當前實體類,To 之後的是下方要對應的實體類。3、舉例說明:一對多 、 多對一
@OneToMany(cascade=CascadeType.ALL,fetch=FetchType.LAZY,mappedBy="news") private Set<StudentBean> studentBean;
student學生實體,對應的級聯操作註解就是:ManyToOne
@ManyToOne(cascade=CascadeType.ALL,fetch=FetchType.LAZY) @JoinColumn(name="news_id", insertable = false,updatable = false) private NewsEntity news;
4、補充
4.1、mappedBy 屬性
4.2、@JoinColumn 註解
可以使用 @JoinColumn 註解來替代 mappedBy 屬性,但是 @JoinColumn 的 name 屬性指定的是資料庫中的列名。4.3、fetch=FetchType.LAZY | EAGER
參考地址: https://blog.csdn.net/u010082453/article/details/433390311、FetchType.LAZY:懶載入,載入一個實體時,定義懶載入的屬性不會馬上從資料庫中載入。 2、FetchType.EAGER:急載入,載入一個實體時,定義急載入的屬性會立即從資料庫中載入。 3、比方User類有兩個屬性,name跟address,就像百度知道,登入後用戶名是需要顯示出來的,此屬性用到的機率極大,要馬上到資料庫查,用急載入; 而使用者地址大多數情況下不需要顯示出來,只有在檢視使用者資料是才需要顯示,需要用了才查資料庫,用懶載入就好了。所以,並不是一登入就把使用者 的所有資料都載入到物件中,於是有了這兩種載入模式。 A、實體物件的延遲載入 如果想對實體物件使用延遲載入,必須要在實體的對映配置檔案中進行相應的配置,如下所示: <hibernate-mapping> <class name=”com.neusoft.entity.User” table=”user” lazy=”true”> …… </class> </hibernate-mapping> 一般是對整個實體物件進行設定是否是懶載入,而非單個屬性。若該實體物件關聯某個物件,如下面:關聯的實體物件通常是懶載入