Java 关闭打开的休眠会话(如果存在)
当Hibernate会话打开时(Java 关闭打开的休眠会话(如果存在),java,hibernate,swing,Java,Hibernate,Swing,当Hibernate会话打开时(sessionFactory.openSession()),它可能会关闭。没关系。如果错过关闭用于检索应用程序中任何位置的数据(而不是保存、更新或删除)的已打开会话,如何关闭已打开的会话(如果存在) (比方说,当一个JFrame关闭时,如果有可用的打开会话,则必须关闭它们。关闭会话可以通过逐个检查代码来完成,但我的意思是,在这里,不检查代码,是否有任何方法可以关闭丢失的会话以使用某段代码关闭).数据库操作完成后,为什么不关闭会话? 我的意思是,在DAO类中,您可以
sessionFactory.openSession()
),它可能会关闭。没关系。如果错过关闭用于检索应用程序中任何位置的数据(而不是保存、更新或删除)的已打开会话,如何关闭已打开的会话(如果存在)
(比方说,当一个
JFrame
关闭时,如果有可用的打开会话,则必须关闭它们。关闭会话可以通过逐个检查代码来完成,但我的意思是,在这里,不检查代码,是否有任何方法可以关闭丢失的会话以使用某段代码关闭).数据库操作完成后,为什么不关闭会话?
我的意思是,在DAO类中,您可以打开会话来执行数据库操作。在最后一个块中,关闭会话。
您可以通过以下方式关闭会话:
finally {
if(session!=null){
session.close();
}
}
或
您可以使用以下命令获取当前会话:
Session sess = sessionFactory.getCurrentSession();
并在JFrame的关闭事件上关闭会话
我收到了以下几行来自
这里的主要约定是创建会话实例。通常
应用程序只有一个SessionFactory实例和线程
服务客户端请求从此工厂获取会话实例。
SessionFactory的内部状态是不可变的。一旦是
此内部状态已设置。这种内部状态包括所有
关于对象/关系映射的元数据。
实现者必须是线程安全的
我们有责任在完成操作或事务后关闭会话。当我们关闭sessionfactory时,所有资源(连接池等)都被正确释放。非常感谢您的回答。我的意思是,如果关闭会话被误认为是一个错误而忘记了,那么当应用程序运行时,就会存在更多打开的会话,并且可能会发生内存浪费。在这种情况下,如何关闭或查看是否有任何会话被打开?您能否给出这种场景的示例(我无法可视化)?
sessions=sessionFactory.openSession();List List=s.createCritaria。list()代码>如果忘记关闭此会话。(没有代码:s.close();)比方说,此获取列表被执行更多次,然后打开一个新会话。然后每次执行上述代码时,一个新会话开始,但没有关闭。然后可能会存在越来越多的打开会话。最后可能会导致jvm内存过载。不是吗?我想关闭已打开的sesseions(如果存在)。谢谢你的关注。哦,我已经相应地编辑了上面的答案。由于应用程序只有一个Sessionfactory,所以我们将拥有与应用程序关联的所有会话,并且可以关闭它们。我不确定,但我阅读并得出结论。谢谢。我试图关闭会话,该会话取自sessionFactory.getCurrentSession()代码>。然后出现异常,表示没有打开任何会话。但是已经打开了一个未关闭的会话。我想我们最好检查两次代码,检查打开的会话。