could not initialize proxy - no Session 問題


 

<many-to-on>

中這錯誤很常見,字面意義就是不能被初始化,因為

session

已經關閉了。

 

 

簡單理解就是因為,

你使用了

lazy=true

這樣

hibernate

在從數據庫中調數據的時候是不會

把關聯的對象查出來的,而是保存一個獲取值得方法,在你使用

getXXX()

調用的時候,

hiberante

會利用這個保存的方法去從數據庫中取數據。而往往我們在

jsp

頁面中使用

getXXX()

准備展示數據的時候,

session

早已經在

dao

中就關閉了,

我們該如何解決這種異

常呢?

 

 

簡單的說有三種:

 

1.

lazy

設成

false,

2

的辦法,但是最簡單,簡單就是美嘛,也依然會有很多再使用這個

方式再解決類似問題。

 

 

2.

我沒試過,但聽說過,應該可行

web.xml

中加入

 

程序代碼

 

<filter> 

 

     

<filter-name>hibernateFilter</filter-name> 

 

     

<filter-class> 

 

     

org.springframework.orm.hibernate3.support.OpenSessionInViewFilter 

 

     

</filter-class> 

 

</filter 

 

<filter-mapping> 

 

     

<filter-name>hibernateFilter</filter-name> 

 

     

<url-pattern>*.do</url-pattern> 

 

</filter-mapping> 

 

 

3.

我用的方法,

也是我認為比較不錯的方法,

靈活性更好。

left join fetch

inner join fetch

語法。

 

例如:

from Item i left join fetch i.parentItem ii 

 

解釋一下

Item

表是一個自關聯的表,它的關聯關系在

hbm.xml

中配置好了。

 

如下:

 

程序代碼

 

<many-to-one name="parentItem" lazy="false" fetch="join" 

class="cn.sports.matchs.model.Item"> 

             

<column name="PARENT_ID"></column> 

</many-to-one> 

 

Item

類中

 

程序代碼

 

private Item parentItem;


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM