您从任何地方复制的DAO,将hibernate会话存储在ThreadLocal对象中,即,正如您提到的,一个hibernate会话绑定到一个线程。
但是您正在做一个Web项目。在那里,您应该将一个Hibernate会话绑定到一个用户(或浏览器),即一个Http会话。但是您不知道在哪个线程中处理来自一个http会话的请求。因此,在您的解决方案中,相同的Http会话可能会获得不同的Hibernate会话,或者也许不同的Http会话可能会获得相同的Hibernate会话。这取决于您的Http服务器。
解决方案:把Hibernate会话到HTTP会话(并 没有
使用ThreadLocal的对象)。你得到HTTP会话对象,具有
HttpServletRequest.getSession()与
HttpSession.getAttribute()/
HttpSession.setAttribute()你可以设置Hibernate的Session和其他HTTP会话相关的数据。



