连接和会话关闭

时间:2012-03-01 16:55:26

标签: java database hibernate

我在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{}
}

如果之前有两个解决方案之一,您能否通过池方式解释会话和连接之间的关系。

2 个答案:

答案 0 :(得分:1)

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

  

默认情况下,会保持JDBC连接,直到会话显式   关闭或断开连接。

如果是池,则关闭连接意味着将连接返回到池。

答案 1 :(得分:1)

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

当你关闭一个会话时,hibernate会确保它没有任何对连接的引用。在Hibernate 3.6.8中,调用被委托给ConnectionManager。检查closeConnection() method。在Hibernate 4中,当你调用session.connection()时,你得到的是代理和休眠3,如果配置了连接池,你最有可能通过连接获得包装。

所以你的选择是调试session.connection()session.close(),并决定是否要关闭这个概念。根据你提供的信息,这里的任何答案都是纯粹的假设。 / p>