淺談hibernate中懶加載禁用操作
淺談hibernate中懶加載禁用操作
懶加載的概念:懶加載就是hibernate中的延遲加載,在hibernate中的一對(duì)多,多對(duì)多關(guān)系中通過對(duì)象導(dǎo)航來查詢對(duì)象時(shí)一般默認(rèn)的就是懶加載。就是當(dāng)我們查詢一個(gè)對(duì)象的時(shí)候,在默認(rèn)情況下,返回的只是該對(duì)象的代理對(duì)象,當(dāng)用戶去使用該對(duì)象的屬性是,才會(huì)向數(shù)據(jù)庫中再一次發(fā)出查詢語句。懶加載在某些情況下確實(shí)可以減少不必要的sql語句,但是有的情況下,還是會(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問題
這個(gè)方法用于ssh整合時(shí),其實(shí)它跟方式二的原因是一樣的,但是解決的方式不同,這種方法是延長session的生命周期,讓session在jsp頁面加載完畢后在關(guān)閉。
這個(gè)過濾器不需要我們寫,因?yàn)閟pring已經(jīng)給我們提供了一個(gè)這樣的過濾器類,我們只需配置就可以使用
在web.xml中配置
<!-- 解決no-session問題過濾器 通過filter來讓session在jsp頁面完畢后再關(guān)閉session 注意: 所有Filter的配置都需要放置在struts2入口過濾器配置之前 --> <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ù)庫中加載,即從數(shù)據(jù)庫中加載到內(nèi)存中。
2、fetch = FetchType.EAGER ----急加載
在加載一個(gè)實(shí)體時(shí),會(huì)立即從數(shù)據(jù)庫中查詢,與其關(guān)聯(lián)的類也會(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過程解析
- 解決spring boot hibernate 懶加載的問題
- 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)文章
java模擬http的Get/Post請(qǐng)求,并設(shè)置ip與port代理的方法
下面小編就為大家?guī)硪黄猨ava模擬http的Get/Post請(qǐng)求,并設(shè)置ip與port代理的方法。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-02-02java中計(jì)算字符串長度的方法及u4E00與u9FBB的認(rèn)識(shí)
字符串采用unicode編碼的方式時(shí),計(jì)算字符串長度的方法找出UNICODE編碼中的漢字的代表的范圍“\u4E00” 到“\u9FBB”之間感興趣的朋友可以參考本文,或許對(duì)你有所幫助2013-01-01Java?DelayQueue實(shí)現(xiàn)任務(wù)延時(shí)示例講解
DelayQueue是一個(gè)無界的BlockingQueue的實(shí)現(xiàn)類,用于放置實(shí)現(xiàn)了Delayed接口的對(duì)象,其中的對(duì)象只能在其到期時(shí)才能從隊(duì)列中取走。本文就來利用DelayQueue實(shí)現(xiàn)延時(shí)任務(wù),感興趣的可以了解一下2022-09-09java使用Rxtx實(shí)現(xiàn)串口通信調(diào)試工具
這篇文章主要為大家詳細(xì)介紹了java使用Rxtx實(shí)現(xiàn)簡(jiǎn)單串口通信調(diào)試工具,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-12-12Spring Boot整合mybatis使用注解實(shí)現(xiàn)動(dòng)態(tài)Sql、參數(shù)傳遞等常用操作(實(shí)現(xiàn)方法)
這篇文章主要介紹了Spring Boot整合mybatis使用注解實(shí)現(xiàn)動(dòng)態(tài)Sql、參數(shù)傳遞等常用操作(實(shí)現(xiàn)方法),本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-08-08Maven發(fā)布項(xiàng)目到Nexus私有服務(wù)器
本文主要介紹了Maven發(fā)布項(xiàng)目到Nexus私有服務(wù)器,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-07-07Spring Security OAuth2 token權(quán)限隔離實(shí)例解析
這篇文章主要介紹了Spring Security OAuth2 token權(quán)限隔離實(shí)例解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-11-11Spring Data JPA 之 JpaRepository的使用
這篇文章主要介紹了Spring Data JPA 之 JpaRepository的使用方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-02-02RocketMQ?offset確認(rèn)機(jī)制示例詳解
這篇文章主要為大家介紹了RocketMQ?offset確認(rèn)機(jī)制示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-09-09