欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

淺談hibernate中懶加載禁用操作

 更新時(shí)間:2020年10月19日 08:59:13   作者:haha_66666  
這篇文章主要介紹了淺談hibernate中懶加載禁用操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧

淺談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è)參考,也希望大家多多支持腳本之家。

相關(guān)文章

最新評(píng)論