![](/img/trans.png)
[英]javax.faces.el.EvaluationException: org.hibernate.LazyInitializationException: could not initialize proxy - no Session
[英]Only in jsp javax.el.ELException: org.hibernate.LazyInitializationException: could not initialize proxy - no Session
您好我有一個Web應用程序spring + hibernate
我jsp我試圖讀取產品的狀態
<p>${product.state }</p>
在我的POJO課程中
public class Product
{
...
public String getState(){
if(this.type == 6)
return "A";
if(propertyB.getRole()== 15)
return "B"
}
}
當一個產品想要訪問屬性是另一個實體,如propertyB
拋出
org.hibernate.LazyInitializationException:無法初始化代理 - 沒有會話
因為我用LEFT JOIN FETCH
改變了我的查詢
FROM Product p LEFT JOIN FETCH p.propertyB b
當我在Junit測試作品中獲得我的產品清單時
當我在我的jsp文件中獲得我的產品列表時拋出
javax.el.ELException:org.hibernate.LazyInitializationException:無法初始化代理 - 沒有會話
當我在Controller中獲得我的產品列表時
for(Product p: listOfProducts){
log.put(p.getState());
}
工作正常!!
但只有在jsp中沒有工作原因?
使用OpenEntityManagerInViewFilter 。 它是一個過濾器,它將數據庫會話附加到呈現jsp的線程。
您可以像在任何其他J2EE過濾器中一樣在web.xml中進行設置。
在將Hibernate.initialize(yourObject)
傳遞給模型之前,請嘗試使用它。
如果要自動解析子屬性,請將其設置為Eager fetch。 如果沒有,您將需要查詢傳遞父項ID的子項。 后者可能是首選的方式(至少對我來說),因為你可能並不總是需要急切地抓住孩子。 但是這需要一個新的休眠會話。
我認為通過單元測試,您可以在每次測試之前初始化會話。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.