SSH整合 Hibernate延遲載入引發的問題

2021-07-29 08:41:36 字數 2072 閱讀 2801

bug描述:

如圖,所屬部門沒有顯示,所屬部門是乙個實體類,員工也是乙個實體類,其中乙個屬性就是部門。這裡之所以沒有顯示就是因為hibernate延遲載入引發的。

延遲載入介紹:(

這裡就是因為一開始載入employee集合的時候,因為department屬性未被使用,所以採用了延遲載入。當在jsp頁面遍歷employee集合的時候,此時就用到了department屬性,但是因為這裡採用的是gethibernatetemplate(),session是由spring注入管理的。而此時session已經被spring關閉,所以無法載入顯示。

解決方法1:配置hibernate時配置成不採用延遲載入lazy=「false」

解決方法二:新增如下**

opensessioninviewfilterfilter-name>

org.springframework.orm.hibernate5.support.opensessioninviewfilter< /filter-class>

filter>

opensessioninviewfilterfilter-name>

*.actionurl-pattern>

該filter會將session繫結至當前請求的執行緒上,這樣只要是在當前請求的生命週期內,可以隨時訪問session。

新增完成後,可以正常顯示。

接著進行增加新員工資訊的時候報錯:

原因當前是唯讀模式,無法進行寫操作,因為我進行的是增加新使用者操作,所以使用了儲存操作.

兩種方法:

1,web.xml中註冊filter時,增加初始化引數(init-param,靈活性不高),進行修改

2,使用宣告式事務**(靈活性很高,推薦)

此處為使用方便,採取第一種:`

param> 

flushmode param-name>

autoparam-value>

param>

對employee的service類新增事物管理後,新增正常

spring3.* + hibernate3.* 整合常見問題總結

spring對hibernate session的管理

hibernate延遲載入與opensessioninviewfilter

opensessioninviewfilter 的配置及作用

後來再次實驗新增的時候報錯

指我的employee引用了乙個瞬時物件,請先儲存該物件在進行操作。

經過排查,發現原來是我的部門沒有選擇,而且在jsp遍歷的時候

所屬部門:td>

name="department.did"

list="list"

listkey="did"

listvalue="dname"

headerkey=""

headervalue="---請選擇---"/>

編號:td>

name="eno" />

td>

tr>headkey是指預設值。我設定為空了,這樣employee裡的department屬性相當於均為null,這樣好像是不被允許的,原因暫時不清楚。只要給它乙個預設值就好了。

struts2中標籤的使用

SSH整合中hibernate的配置方式

hibernate的配置方式有兩種 第一種為 編寫hibernate.cfg.xml,並且為每個對映類編寫.hbm.xml檔案 hibernate.cfg.xml檔案的內容如下 jdbc for mysql jdbc mysql localhost 3306 demo root admin com....

SpringMVC整合hibernate的問題

我想實現多個查詢 類似於這樣的,三個文字框,填寫哪個按照哪個條件查詢,都不填就全查詢。這個的實現。repository public class userdaoimpl implements userdao 根據乙個起止日期查詢之後所有記錄 public listgetuserlistbydatet...

load和get之Hibernate的延遲載入機制

在hibernate中 如果你使用load方法,hibernate認為該id對應的物件 資料庫記錄 在資料庫中是一定存在的,所 以它可以放心的使用,它可以放心的使用 來延遲載入該物件。在用到物件中的其他屬性資料時才查詢資料庫,但是萬一資料庫中不存在該記錄,那沒辦法,只能拋異常 objectnotfo...