1. 程式人生 > 程式設計 >淺談hibernate中懶載入禁用操作

淺談hibernate中懶載入禁用操作

淺談hibernate中懶載入禁用操作

懶載入的概念:懶載入就是hibernate中的延遲載入,在hibernate中的一對多,多對多關係中通過物件導航來查詢物件時一般預設的就是懶載入。就是當我們查詢一個物件的時候,在預設情況下,返回的只是該物件的代理物件,當用戶去使用該物件的屬性是,才會向資料庫中再一次發出查詢語句。懶載入在某些情況下確實可以減少不必要的sql語句,但是有的情況下,還是會丟擲異常。

下面我將介紹懶載入禁用的方式

方式一:

在需要禁用懶載入的實體物件的配置檔案中配置lazy="false";

例如:

<many-to-one name="lkm_cust_id" lazy="false" column="lkm_cust_id" class="com.haha.domain.Customer"/>

方式二:

在service中強行載入這個代理物件,因為service層提交完事務之後,session就關閉了;所以要在session關閉之前把這個代理物件給載入了。

public Customer toedit(Customer customer) {
 Customer c= customerDao.toedit(customer);
 Hibernate.initialize(c);//強行載入
 return c;
 }

方式三:

注意:這種方法可以高效的解決我們的no-session問題

這個方法用於ssh整合時,其實它跟方式二的原因是一樣的,但是解決的方式不同,這種方法是延長session的生命週期,讓session在jsp頁面載入完畢後在關閉。

淺談hibernate中懶載入禁用操作

這個過濾器不需要我們寫,因為spring已經給我們提供了一個這樣的過濾器類,我們只需配置就可以使用

在web.xml中配置

<!-- 解決no-session問題過濾器 
 通過filter來讓session在jsp頁面完畢後再關閉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>

補充知識:hibernate中懶載入和急載入的區別?

1、fetch = FetchType.LAZY ----懶載入

在載入一個實體的時候,不會馬上從資料庫中載入,即從資料庫中載入到記憶體中。

2、fetch = FetchType.EAGER ----急載入

在載入一個實體時,會立即從資料庫中查詢,與其關聯的類也會被同時查詢。

在我們使用@ManyToOne等時,都會被預設為急載入。

以上這篇淺談hibernate中懶載入禁用操作就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支援我們。