我在Hibernate中映射了这样的结构(使用XDoclet,因为它是旧项目):
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 :(得分:0)
你是如何阅读学生对象的?
因为如果您在返回之前从关闭会话的方法中阅读Student
,则访问@Lazy
集合会生成LazyInitializationException
。
我建议你检查你的会话生命周期。
答案 1 :(得分:0)
确保您的代码在会话关闭之前调用学生的访问者方法。或者在您使用spring和transactions的情况下,它必须在您的会话处于活动状态的范围内。