2012-03-01 96 views
2

我在Try集团下面的代码:连接和会话结束

// Session variable 
Session session = null; 
// Connection variable 
Connection conn = null; 

try { 
... 
// Get hibernate session 
session = getHibernateTemplate().getSessionFactory().openSession(); 
// Get connection frojm session 
conn = session.connection(); 
... 
}catch{ 
... 
} 

而在finally集团我想与集团数据库的连接的所有相关对象。

会议闭幕让我们关闭连接?或者我们必须先关闭连接? 解决方案1:

finally{ 
try{if (conn!=null) conn.close();}ctach{} 
try{if (session!=null) session.close();}catch{} 
} 

解决方案2:

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

在之前的两种解决方案之一的情况下,你能解释专门通过会话和连接之间的关系泳池的方式。

+0

这是Java的吗?你没有把它标记为这样。 – Perry 2012-03-01 17:08:15

+0

是的,当然,我已经添加了Java标记 – kaissun 2012-03-02 07:42:32

回答

1

第二种方法就够了。如果您尚未设置hibernate.connection.release_mode,则使用默认(自动)。根据文档:

默认情况下,将保持JDBC连接,直到会话明确为 关闭或断开连接。

在池的情况下,关闭连接意味着连接返回池。

1

首先,我想知道为什么要在提到的代码中关闭连接?

当你关闭一个会话时,hibernate会确保它不包含对连接的任何引用。在Hibernate 3.6.8中,该调用委托给ConnectionManager。检查closeConnection() method。在Hibernate 4中,当你调用session.connection()时,你得到的是一个代理,而在hibernate 3中,如果连接池已配置,则很可能会通过连接进行封装。

因此,您的选择是调试session.connection()session.close(),并决定是否要关闭该接受或不接受。根据您提供的信息,这里的任何答案都是纯粹的假设。