Java 打开hibernate会话而不关闭会话的影响
我最近在代码中发现了一个问题,我打开了一个hibernate会话,但忘记关闭它。虽然我修复了它,但我似乎无法理解我犯的这个错误的影响 这段代码在HTTP服务中,我需要两种情况的答案:Java 打开hibernate会话而不关闭会话的影响,java,mysql,database,hibernate,session,Java,Mysql,Database,Hibernate,Session,我最近在代码中发现了一个问题,我打开了一个hibernate会话,但忘记关闭它。虽然我修复了它,但我似乎无法理解我犯的这个错误的影响 这段代码在HTTP服务中,我需要两种情况的答案: 当请求到来时,容器生成一个新线程 它从线程池中获取 我在其他帖子中读到会话绑定到线程,所以我从中推断出,如果在每个请求中生成了一个新线程,并且我在其中一个请求中保留了一个打开的会话。当请求完成时,它将被销毁。我不知道我是否正确。这取决于您使用什么来控制会话生命周期。 例如,如果将“每个请求的会话模式”与一起使用,则
我在其他帖子中读到会话绑定到线程,所以我从中推断出,如果在每个请求中生成了一个新线程,并且我在其中一个请求中保留了一个打开的会话。当请求完成时,它将被销毁。我不知道我是否正确。这取决于您使用什么来控制会话生命周期。 例如,如果将“每个请求的会话模式”与一起使用,则会话将被筛选器关闭。您也可以使用自己的筛选器来控制会话 如果你不使用过滤器或类似的东西,你应该关闭一个会话。 处理请求的线程对Hibernate会话一无所知
SessionFactory.openSession()
始终打开新会话
SessionFactory.getCurrentSession()
检查当前会话是否存在-返回它,如果当前会话不存在-创建一个新会话。“当前会话”的含义取决于会话工厂参数。在经典情况下,会话绑定到线程(如您所描述的),但它可以绑定到事务,例如 这取决于您使用什么来控制会话生命周期。
例如,如果将“每个请求的会话模式”与一起使用,则会话将被筛选器关闭。您也可以使用自己的筛选器来控制会话
如果你不使用过滤器或类似的东西,你应该关闭一个会话。
处理请求的线程对Hibernate会话一无所知
SessionFactory.openSession()
始终打开新会话
SessionFactory.getCurrentSession()
检查当前会话是否存在-返回它,如果当前会话不存在-创建一个新会话。“当前会话”的含义取决于会话工厂参数。在经典情况下,会话绑定到线程(如您所描述的),但它可以绑定到事务,例如