2013-08-19 81 views
0

我有結構像這樣的Hibernate映射(使用XDoclet的,因爲它是舊的項目):Hibernate的LazyInitializationException異常:無法初始化代理 - 沒有會話

public class Student { 
    String name; 
    int age; 
    School school; //many to one 
    // ... 
} 

public class School { 
    String name; 
    // ... 
} 

我想打印學生所在學校的名稱(用學生對象),像這樣:

System.out.println("School name: " + student.getSchool().getName()); 

,但我得到:

org.hibernate.LazyInitializationException:無法初始化代理 - 無會話

我不希望改變映射文件(因爲我不是這個作者),所以這是什麼問題的其他解決方案?

+0

發佈hbm文件的內容。它看起來並不像學校正在初始化的那樣嚴格 – happybuddha

+0

我只想在上面的表格和錯誤中顯示多對一的關係(學生和學校)。我不想編輯任何HBM文件,xdoclet代碼等。是否有任何其他想法來解決它? –

回答

0

您是如何閱讀學生對象的?
因爲如果您正在從返回前關閉會話的方法中讀取Student,則訪問@Lazy集合將生成LazyInitializationException
我建議你檢查你的會話生命週期。

0

確保您的代碼在會話關閉之前調用學生的訪問器方法。或者在你使用spring和transactions的情況下,它必須在你的session激活的範圍內。

相關問題