我最近在我的代码中发现了一个问题,我打开了一个hibernate会话,但忘了关闭它。虽然我修好了但是我似乎无法理解这个错误的影响。
此代码在HTTP服务中,我需要两种情况的答案:
我在其他帖子中读过会话绑定到线程,所以我从中推断出,如果在每个请求中生成了一个新线程,并且我在其中一个中打开了一个会话。当请求完成后,它将被销毁。我不知道我是对的。
答案 0 :(得分:0)
这取决于您用来控制会话生命周期的内容。 如果您使用“每个请求模式的会话”,例如OpenSessionInViewFilter,会话将由过滤器关闭。您也可以使用自己的过滤器来控制会话。
如果您不使用过滤器或类似的东西,您应该始终关闭会话。 处理请求的线程对Hibernate会话一无所知。
SessionFactory.openSession()
总是打开一个新会话。
SessionFactory.getCurrentSession()
检查,如果当前会话存在 - 返回它,如果当前会话不存在 - 创建一个新会话。 “当前会话”的含义取决于会话工厂参数。在经典案例中,会话与线程有关(如您所描述的),但它可以限制在事务中,例如。