could not initialize proxy - Session was closed

可能原因:
當<class>元素或者<set>元素的lazy屬性爲true時,load() or get() or find()加載這些對象時,Hibernate不會馬上產生任何select語句,只是產生一個Obj代理類實例,只有在session沒有關閉的情況下運行Obj.getXxx()時纔會執行select語句從數據庫加載對象,如果沒有運行任何Obj.getXxx()方法,而session已經關閉,Obj已成遊離狀態,此時再運行Obj.getXxx()方法,Hibernate就會拋出"Could not initialize proxy - the owning Session was closeed"的異常,是說Obj代理類實例無法被初始化。然而想在Session關閉之前不調用Obj.getXxx()方法而關閉Session之後又要用,此時只要在Session關閉之前調用Hibernate.initialize(Obj)或者Hibernate.initialize(Obj.getXxx())即可,net.sf.hibernate.Hibernate類的initialize()靜態方法用於在Session範圍內顯示初始化代理類實例。

解決方法:
所以,在映射文件中,將lazy屬性設爲false即可,<class name="cssduty.table.Team" table="team" catalog="duty" lazy="false">
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章