2011-12-15 59 views
1

休眠会话打开时(sessionFactory.openSession())可能会关闭。没关系。如果错过了关闭用于检索数据(不保存,更新或删除)应用程序中任何位置的打开会话,如何关闭打开的会话(如果存在)?关闭打开休眠会话(如果存在)

(假设当一个JFrame已关闭,如果打开的会话可用,它们必须关闭。关闭会话可以通过逐个查看代码来完成,但我的意思是在这里没有检查代码,是在那里任何方式来关闭会议,这是错过了一段代码关闭)。

回答

3

为什么不在数据库操作完成时关闭会话? 我的意思是,在DAO类中你打开会话执行数据库操作。并在最后阻止,关闭你的会话。 您可以关闭喜欢会话:

finally { 
    if(session!=null){ 
     session.close(); 
    } 
} 

OR

你可以在关闭JFrame的事件中使用

Session sess = sessionFactory.getCurrentSession(); 

并关闭会话当前会话。

我从this link

以下行这里的主力合约是会话实例的创建。通常, 应用程序具有一个SessionFactory实例,并且服务于客户端请求的线程 从该工厂获取Session实例。 SessionFactory的内部状态是不可变的。一旦创建了这个内部状态 被设置。该内部状态包括关于对象/关系映射的元数据的所有 。 执行者必须是线程安全的。

我们有责任在完成操作或交易时关闭会话。当我们关闭sessionfactory时,所有资源(连接池等)都会正确释放。

+1

非常感谢您的回答。我的意思是,如果关闭会话被忘记为一个错误,并且应用程序运行时会存在更多打开的会话,然后可能会发生内存浪费。在这种情况下,如何关闭或看到有任何会话打开? – 2011-12-16 10:28:35