使用 SessionFactoryUtils 时我应该关闭连接吗
Posted
技术标签:
【中文标题】使用 SessionFactoryUtils 时我应该关闭连接吗【英文标题】:Should I close connection when using SessionFactoryUtils 【发布时间】:2010-08-05 06:41:47 【问题描述】:如果我想使用 SessionFactoryUtils 直接获取 Connection 执行一些 SQL 语句,并加入同一个事务。 像这样:
SessionFactoryUtils.getDataSource(getSessionFactory()).getConnection();
//some logic after Connection retrieved
我必须自己关闭连接吗?还是就这样吧,Hibernate Session 会为我处理它?
【问题讨论】:
【参考方案1】:如果我想使用
SessionFactoryUtils
直接获取Connection来执行一些SQL语句,并加入同一个事务。 (...) 我必须自己关闭Connection
吗?或者就这样,HibernateSession
会为我处理它?
您在此处直接从池中借用连接,不能保证Session
会获得相同的 IMO。因此,您有责任正确关闭该连接,我建议使用:
SessionFactoryUtils.getDataSource(getSessionFactory()).closeConnection(conn);
如果您想使用由Session
管理的连接,请使用Session#doWork(Work)
(这个新的API 取代了旧的Session#connection()
方法,该方法已被弃用并将从Hibernate 4.x 中删除)。在这种情况下,将使用Session
关闭连接。
或者也许只是使用Session#createSQLQuery(String)
,就像已经建议的那样。
实际上,提供更多上下文信息(您是否在模板中、您是否已经有一个 Session、您会得到一个等)确实有助于找到最佳解决方案(它可能不是选择的那个)。
另见
Colin 在线程中的回答:When using JdbcTemplate, how do I access the connection?【讨论】:
【参考方案2】:我认为您需要做的就是正确处理您的会话(即刷新、关闭它,无论您的设置是否有效)。
但是为什么不使用createSQLQuesry Session 的方法而不是直接连接呢?
【讨论】:
以上是关于使用 SessionFactoryUtils 时我应该关闭连接吗的主要内容,如果未能解决你的问题,请参考以下文章