hibernate懶載入導致多表聯合查詢失敗
由於hibernate預設啟用懶載入策略,若session關閉後則無法使用查詢的內容。比如 一個部門有多個職務,一個職務有多個員工,當我們查詢員工時,需要顯示其職務和部門,如圖
資料庫為:
若service層的程式碼為
public List<CrmStaff> findAllStaff() {
return staffDao.findAll();
}
然後去JSP頁面取資料時,部門和職務不顯示。因為session已經關閉了。
JSP頁面部分程式碼:
<s:iterator value="#allStaff">
<tr class="tabtd2">
<td align="center"><s:property value="staffName"/></td>
<td align="center"><s:property value="gender"/></td>
<td align="center"><s:date name="onDutyDate" format="yyyy-MM-dd"/></td>
<td align="center"><s:property value="post.department.depName"/></td>
<td align="center"><s:property value="post.postName"/></td>
<td width="7%" align="center">
<a href="${pageContext.request.contextPath}/pages/staff/editStaff.jsp"><img src="${pageContext.request.contextPath}/images/button/modify.gif" class="img" /></a>
</td>
</tr>
</s:iterator>
解決思路1: 在員工表和職務表中取消懶載入,從而查詢員工時 同時 查出職務 ,查詢職務時 同時 查出部門。此方法只能查出員工的職務,無法查出部門。
員工.hbm.xml配置
<!-- 多對一:多個員工 屬於 【一個職務】 -->
<many-to-one name="post" class="com.hantao.crm.post.domain.CrmPost" column="postId" lazy="true"></many-to-one>
職務.hbm.xml配置
<!-- 多對一:多個職務 屬性 【一個部門】 -->
<many-to-one name="department" class="com.hantao.crm.department.domain.CrmDepartment" column="depId" lazy="true"></many-to-one>
解決思路2: 使用spring的延遲session關閉功能,從而使jsp頁面取資料時session還沒關閉。成功。
<!--3 spring 過濾器,延遲session關閉-->
<filter>
<filter-name>openSession</filter-name>
<filter-class>org.springframework.orm.hibernate3.support.OpenSessionInViewFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>openSession</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
解決思路3: 在service層中get一下將來要使用的資料,從而在session關閉前取得資料。成功。
public List<CrmStaff> findAllStaff() {
List<CrmStaff> temp = staffDao.findAll();
for (CrmStaff crmStaff : temp) {
//列印每個員工的部門名稱
System.out.print(crmStaff.getPost().getDepartment().getDepName());
}
return temp;
}
相關文章
- thinkPHP多表聯合查詢PHP
- JPA 之 多表聯合查詢
- jpa動態查詢與多表聯合查詢
- Hibernate hql 多表查詢
- 誤操作經歷,truncate導致閃回查詢失敗
- mybatis多表聯合查詢的寫法MyBatis
- hibernate懶載入
- 多表聯合查詢 - 基於註解SQLSQL
- Hibernate 之 懶載入
- MySQL多表關聯查詢MySql
- JPA多表關聯查詢
- MYSQL學習筆記24: 多表查詢(聯合查詢,Union, Union All)MySql筆記
- 懶載入例項--hibernate
- 獲取導致匯入失敗的資料
- selinux導致sqlplus登入失敗LinuxSQL
- SQL Server 多表聯合查詢取最新一條資料SQLServer
- window換行符導致Linux下sqlldr載入圖片失敗LinuxSQL
- 獲取導致匯入失敗的資料(五)
- 獲取導致匯入失敗的資料(四)
- 獲取導致匯入失敗的資料(三)
- 獲取導致匯入失敗的資料(二)
- 如何做多表關聯查詢
- mysql中的多表關聯查詢MySql
- thinkphp中的多表關聯查詢PHP
- MyBatis 多表聯合查詢,欄位重複的解決方法MyBatis
- 什麼是hibernate懶載入?什麼時候用懶載入?為什麼要用懶載入?(轉)
- k8s-記一次安全軟體導致映象載入失敗K8S
- 深入sql多表差異化聯合查詢的問題詳解SQL
- asp.net 利用多表聯合查詢進行彙總統計ASP.NET
- MyBatisPlus怎麼多表關聯查詢?MyBatis
- 多表查詢
- 程式碼分層導致Hibernate懶載入失效的問題我認為沒有必要考慮
- js img圖片載入失敗,重新載入+斷網檢查JS
- Hibernate 基本操作、懶載入以及快取快取
- 開發人員不得不會的MySQL多表聯合查詢方法!MySql
- onethinkphp 如何做多表關聯查詢PHP
- Drive客戶端因SSL證書已更改導致聯機失敗客戶端
- Filestream/Windows Share導致Alwayson Failover失敗WindowsAI