由于hibernate采用了lazy=true,这样当你用hibernate查询时,返回实际为利用cglib增强的代理类,但其并没有实际填充;当你在前端,利用它来取值(getXXX)时,这时Hibernate才会到数据库执行查询,并填充对象,但此时如果和这个代理类相关的session已关闭掉,就会产生种错误.

解决方案 »

  1.   

    那为什么我用<logic:iterator/>能显示其中的数据不抱错呢?
      

  2.   

    还要看你是配置的什么地方的lazy,lazy分为class情况和一对多情况,class那里的配置lazy在hibernate2中默认是false,而在hibernate3中是true,如果是class配置的缘故,可以改为false,对性能没有大影响
      

  3.   

    1.要想在视图层使用lazy机制,必须使用hibernate的open session in viewer,不过不推荐这样做,会消耗大量的连接。
    2.把那个对应的POJO的HBM文件加上lazy="false"
      

  4.   

    我的修改了也没有,不知道你的页面是不是实体来取值的,如果是的话,就加个dto进去就可以(写个bean)不用实体就可以了,我的就是这样,不过这不是解决的办法,只是一个障眼法