是不是hibernate 自己有防刷新机制啊?呵呵我是菜鸟我猜得

解决方案 »

  1.   

    应该不是吧..如果这样的话对用户很不友好..我想应该不是..呵呵.是啊我也在等.
    哎..对hibernate机制不了解.我也是初学者,一起关注.一起努力吧....
      

  2.   

    人们设计用 ThreadLocal 处理 JSP /Servlet 场景中的 HibernateSession 的意图,因为 JSP/Servlet 每一个请求 容器生成一个 线程去执行。从ThreadLocal 中取得  Session 时,一个线程将只会有一个 Session, 他用 当前线程为 Key 放置变量(这里是 Session) 到一个 Map ) 中,所以一个线程内每一次调用 get /set 都是操作一个东西,当这个线程生命周期结束了,这个变量也会被当成垃圾, 那么 如果你 调用过了一次  SessionFactory.currentSession().close(); 那么同一个线程中下一次你就不能再直接 SessionFactory.currentSession().createQuery() 了。  出现这种情况很可能是你在一次请求中访问过 2 次数据库,而且都用的 .currentSession() 得到 session 并且每次都关闭了,或者个 你在 A.jsp 中 .currentSession() 访问数据库,  然后你  forward B.jsp 中有访问了一次数据库,这2 次你都 .currentSession().close() 了。  要记住: 如果你用  ThreadLocal.get() 这种方式获得线程 , 那么一次servlet request请求,Session 可以获得使用多次但是只能关闭一次。 一般的解决方案 搭配 Servlet Filter , 在 Filter 退出时 .currentSession().close();  其他任何时候都不掉用 .currentSession().close(); 
      

  3.   

    更正: 如果你用 ThreadLocal.get() 这种方式获得Session ,补充: 也可以考虑 if ( !session.isConnected() ) session.reconnect();