保证级联取和取对象在一个线程内,这是hibernate的线程本地变量对session的持有造成

解决方案 »

  1.   

    遗憾的是,这个无法保证这个业务实体的取得和使用在同一个线程内啊.
    简单举例:变更页面的进入->显示->用户修改内容并submit的这个过程,已经执行过两次Servlet了.
        依照书里说的话,可以在"修改并提交"这个过程里,重新load一下这个已经游离的业务实体,但是由于这个项目的种种原因,方案不可行...呵呵,其他的想法呢?
      

  2.   

    不明白你采用得什么系统架构如果你不方便在客户端显示敏感信息,可以在服务器端做一个sessionid得池来保存这些变量,这样可以解决所有得问题
      

  3.   

    在取出来之后
    if(!Hibernate.isInitialized(object)){
    Hibernate.initialize(object);
    }
      

  4.   

    把某业务实体设为Lazy加载;也就是说;在你没有去操作这个“业务实体”之前;这个“业务实体”是null;如果你在操作这个“业务实体”时之前关闭Session;就会抛出"session  is  close"异常.因为你在操作这个“业务实体”的时侯;Hibernate才使用session对象去访问数据库加载“业务实体”数据;你已经关闭Session了,所有就无法从数据库中加载数据了;自然就抛出"session  is  close"异常。关于Lazy的属性详细说明,你可以到hibernate v3.04中文参考手册查找。
      

  5.   

    OpenSessionInView,根本解决之道,否则我劝您还是放弃hibernate,对己对人对公司都好。
      

  6.   

    关注``我也遇到这问题```hbm.xml里设置是true, 后面调用关联表的时候 就报错 session close又要手动去设置false...这样弄 太痛苦了....