hibernate默认是使用惰性载入的,即在读入主表的数据时不会自动装载子表的数据,如果你通过调用Pojo中的getXXX()方法来读入子表数据的时候已经使用HibernateUtil.closeSession()方法关闭了session的话就会报这个错,原因很简单,因为是惰性载入时,子表的数据没有在母对象装载的时候装载,而是在你调用get方法的时候hibernate自动通过一个子表查询语句来装载的,而这时你的session已经关闭,那个这查询自然就无法完成,异常

解决方案 »

  1.   

    chatboycsdn(江湖小虾米)你说的我也知道,但是怎么做你怎么不说。
      

  2.   

    我晕,楼上的,就是设置lazy啊
      

  3.   

    我知道,有没有让他用的事候再初始化数据
    “请问Session在这个过程中的开闭有什么特殊的要求??”
    我要用懒汉式,Session要怎么控制??
      

  4.   

    实际上Hibernate提供几种选择的:
    1、自己在映射文件里改“lazy”参数,但是有时这个效率太低;
    2、根据需要在session仍然打开是调用 setName.size(),(setName你的集合名称),但是这个有点可能有点令人费解,也不符合通常的代码规范;
    3、根据需要在session仍然打开是使用Hibernate.initialize(parent.getSetName())来转载数据;
    4、采用 fetch all properties 查询选项来进行强制装载,如 "From Parent fetch all properties",这就可以只对这个查询的结果集生效。
    我知道的就这么多,看看谁还有补充哦。
      

  5.   

    用open session in view应该就可以,你是在测试或者action里报错吗