Hibernate中get和load的區別

1、當數據庫不存在對應ID數據時,調用load()方法將會拋出ObjectNotFoundException異常,get()方法將返回null,我比較喜歡使用get()方法。

2、當對象.hbm.xml配置文件<class>元素的lazy屬性設置爲true時,調用load()方法時則返回持久對象的代理類實例,此時的代理類實例是由運行時動態生成的類,該代理類實例包括原目標對象的所有屬性和方法,該代理類實例的屬性除了ID不爲null外,所在屬性爲null值,查看日誌並沒有Hibernate SQL輸出,說明沒有執行查詢操作,當代理類實例通過getXXX()方法獲取屬性值時,Hiberante才真正執行數據庫查詢操作。當對象.hbm.xml配置文件<class>元素的lazy屬性設置爲false時,調用load()方法則是立即執行數據庫並直接返回實體類,並不返回代理類。而調用get()方法時不管lazy爲何值,都直接返回實體類。

3、load()和get()都會先從Session緩存中查找,如果沒有找到對應的對象,則查詢Hibernate二級緩存,再找不到該對象,則發送一條SQL語句查詢。

發佈了24 篇原創文章 · 獲贊 7 · 訪問量 18萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章