hibernate默认是使用惰性载入的,即在读入主表的数据时不会自动装载子表的数据,如果你通过调用Pojo中的getXXX()方法来读入子表数据的时候已经使用HibernateUtil.closeSession()方法关闭了session的话就会报这个错,原因很简单,因为是惰性载入时,子表的数据没有在母对象装载的时候装载,而是在你调用get方法的时候hibernate自动通过一个子表查询语句来装载的,而这时你的session已经关闭,那个这查询自然就无法完成,异常
调试欢乐多
“请问Session在这个过程中的开闭有什么特殊的要求??”
我要用懒汉式,Session要怎么控制??
1、自己在映射文件里改“lazy”参数,但是有时这个效率太低;
2、根据需要在session仍然打开是调用 setName.size(),(setName你的集合名称),但是这个有点可能有点令人费解,也不符合通常的代码规范;
3、根据需要在session仍然打开是使用Hibernate.initialize(parent.getSetName())来转载数据;
4、采用 fetch all properties 查询选项来进行强制装载,如 "From Parent fetch all properties",这就可以只对这个查询的结果集生效。
我知道的就这么多,看看谁还有补充哦。