Posted on 2008-02-21 14:22
Sussi 閱讀(534)
評(píng)論(1) 編輯 收藏
可能原因:
當(dāng)<class>元素或者<set>元素的lazy屬性為true時(shí),load() or get() or find()加載這些對(duì)象時(shí),Hibernate不會(huì)馬上產(chǎn)生任何select語(yǔ)句,只是產(chǎn)生一個(gè)Obj代理類實(shí)例,只有在session沒(méi)有關(guān)閉的情況下運(yùn)行Obj.getXxx()時(shí)才會(huì)執(zhí)行select語(yǔ)句從數(shù)據(jù)庫(kù)加載對(duì)象,如果沒(méi)有運(yùn)行任何Obj.getXxx()方法,而session已經(jīng)關(guān)閉,Obj已成游離狀態(tài),此時(shí)再運(yùn)行Obj.getXxx()方法,Hibernate就會(huì)拋出"Could not initialize proxy - the owning Session was closeed"的異常,是說(shuō)Obj代理類實(shí)例無(wú)法被初始化。然而想在Session關(guān)閉之前不調(diào)用Obj.getXxx()方法而關(guān)閉Session之后又要用,此時(shí)只要在Session關(guān)閉之前調(diào)用Hibernate.initialize(Obj)或者Hibernate.initialize(Obj.getXxx())即可,net.sf.hibernate.Hibernate類的initialize()靜態(tài)方法用于在Session范圍內(nèi)顯示初始化代理類實(shí)例。
解決方法:
所以,在映射文件中,將lazy屬性設(shè)為false即可,<class name="cssduty.table.Team" table="team" catalog="duty" lazy="false">