淺談hibernate中懶加載禁用操作
淺談hibernate中懶加載禁用操作
懶加載的概念:懶加載就是hibernate中的延遲加載,在hibernate中的一對(duì)多,多對(duì)多關(guān)系中通過(guò)對(duì)象導(dǎo)航來(lái)查詢對(duì)象時(shí)一般默認(rèn)的就是懶加載。就是當(dāng)我們查詢一個(gè)對(duì)象的時(shí)候,在默認(rèn)情況下,返回的只是該對(duì)象的代理對(duì)象,當(dāng)用戶去使用該對(duì)象的屬性是,才會(huì)向數(shù)據(jù)庫(kù)中再一次發(fā)出查詢語(yǔ)句。懶加載在某些情況下確實(shí)可以減少不必要的sql語(yǔ)句,但是有的情況下,還是會(huì)拋出異常。
下面我將介紹懶加載禁用的方式
方式一:
在需要禁用懶加載的實(shí)體對(duì)象的配置文件中配置lazy="false";
例如:
<many-to-one name="lkm_cust_id" lazy="false" column="lkm_cust_id" class="com.haha.domain.Customer"/>
方式二:
在service中強(qiáng)行加載這個(gè)代理對(duì)象,因?yàn)閟ervice層提交完事務(wù)之后,session就關(guān)閉了;所以要在session關(guān)閉之前把這個(gè)代理對(duì)象給加載了。
public Customer toedit(Customer customer) {
Customer c= customerDao.toedit(customer);
Hibernate.initialize(c);//強(qiáng)行加載
return c;
}
方式三:
注意:這種方法可以高效的解決我們的no-session問(wèn)題
這個(gè)方法用于ssh整合時(shí),其實(shí)它跟方式二的原因是一樣的,但是解決的方式不同,這種方法是延長(zhǎng)session的生命周期,讓session在jsp頁(yè)面加載完畢后在關(guān)閉。

這個(gè)過(guò)濾器不需要我們寫(xiě),因?yàn)閟pring已經(jīng)給我們提供了一個(gè)這樣的過(guò)濾器類(lèi),我們只需配置就可以使用
在web.xml中配置
<!-- 解決no-session問(wèn)題過(guò)濾器 通過(guò)filter來(lái)讓session在jsp頁(yè)面完畢后再關(guān)閉session 注意: 所有Filter的配置都需要放置在struts2入口過(guò)濾器配置之前 --> <filter> <filter-name>openSessionInView</filter-name> <filter-class>org.springframework.orm.hibernate5.support.OpenSessionInViewFilter</filter-class> </filter> <filter-mapping> <filter-name>openSessionInView</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>
補(bǔ)充知識(shí):hibernate中懶加載和急加載的區(qū)別?
1、fetch = FetchType.LAZY ----懶加載
在加載一個(gè)實(shí)體的時(shí)候,不會(huì)馬上從數(shù)據(jù)庫(kù)中加載,即從數(shù)據(jù)庫(kù)中加載到內(nèi)存中。
2、fetch = FetchType.EAGER ----急加載
在加載一個(gè)實(shí)體時(shí),會(huì)立即從數(shù)據(jù)庫(kù)中查詢,與其關(guān)聯(lián)的類(lèi)也會(huì)被同時(shí)查詢。
在我們使用@ManyToOne等時(shí),都會(huì)被默認(rèn)為急加載。
以上這篇淺談hibernate中懶加載禁用操作就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
- Hibernate雙向一對(duì)一映射關(guān)系配置代碼實(shí)例
- Hibernate雙向多對(duì)多映射關(guān)系配置代碼實(shí)例
- Hibernate基于ThreadLocal管理Session過(guò)程解析
- 解決spring boot hibernate 懶加載的問(wèn)題
- springboot 2.3之后消失的hibernate-validator解決方法
- Idea+maven搭建SSH(struts2+hibernate5+spring5)環(huán)境的方法步驟
- Spring+SpringMVC+Hibernate整合實(shí)例講解
- Hibernate傳入Java對(duì)象創(chuàng)建動(dòng)態(tài)表并錄入數(shù)據(jù)
相關(guān)文章
詳解SpringBoot使用RedisTemplate操作Redis的5種數(shù)據(jù)類(lèi)型
本文主要介紹了SpringBoot使用RedisTemplate操作Redis的5種數(shù)據(jù)類(lèi)型,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-03-03
半小時(shí)實(shí)現(xiàn)Java手?jǐn)]網(wǎng)絡(luò)爬蟲(chóng)框架(附完整源碼)
最近在做一個(gè)搜索相關(guān)的項(xiàng)目,需要爬取網(wǎng)絡(luò)上的一些鏈接存儲(chǔ)到索引庫(kù)中,自己寫(xiě)了一個(gè)簡(jiǎn)單的網(wǎng)絡(luò)爬蟲(chóng),感興趣的可以了解一下2021-06-06
java Object轉(zhuǎn)byte與byte轉(zhuǎn)Object方式
這篇文章主要介紹了java Object轉(zhuǎn)byte與byte轉(zhuǎn)Object方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-08-08
使用RequestBodyAdvice實(shí)現(xiàn)對(duì)Http請(qǐng)求非法字符過(guò)濾
這篇文章主要介紹了使用RequestBodyAdvice實(shí)現(xiàn)對(duì)Http請(qǐng)求非法字符過(guò)濾的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-06-06
Java 數(shù)據(jù)結(jié)構(gòu)與算法系列精講之紅黑樹(shù)
紅黑樹(shù)的應(yīng)用比較廣泛,主要是用它來(lái)存儲(chǔ)有序的數(shù)據(jù),它的時(shí)間復(fù)雜度是O(lgn),效率非常之高。例如,Java集合中的TreeSet和TreeMap,C++ STL中的set、map,以及Linux虛擬內(nèi)存的管理,都是通過(guò)紅黑樹(shù)去實(shí)現(xiàn)的2022-02-02
Java中用于SMB/CIFS網(wǎng)絡(luò)的JCIFS庫(kù)的用法詳解
JCIFS是一個(gè)強(qiáng)大的庫(kù),允許Java應(yīng)用程序無(wú)縫地與SMB/CIFS資源進(jìn)行交互,本文將探討JCIFS的概念和工作原理以及如何在?Java?應(yīng)用程序中有效使用它,希望對(duì)大家有所幫助2024-12-12

