我应该在使用SessionFactoryUtils时关闭连接

时间:2010-08-05 06:41:48

标签: java hibernate spring orm

如果我想使用SessionFactoryUtils直接获取Connection执行某些SQL语句,并加入同一个事务。 像这样:

SessionFactoryUtils.getDataSource(getSessionFactory()).getConnection();
//some logic after Connection retrieved

我必须自己关闭Connection吗?或者只是让它成为,Hibernate Session会为我处理它?<​​/ p>

2 个答案:

答案 0 :(得分:3)

  

如果我想使用SessionFactoryUtils直接获取Connection执行某些SQL语句,并加入同一个事务。 (...)我必须自己关闭Connection吗?或者只是让它成为Hibernate Session将为我处理它?<​​/ p>

您在这里直接从池中借用连接,并且无法保证Session可以获得相同的IMO。因此,您有责任正确关闭该连接,我建议使用:

SessionFactoryUtils.getDataSource(getSessionFactory()).closeConnection(conn);

如果您想使用Session管理的连接,请使用Session#doWork(Work)(此新API替换旧的Session#connection()方法,该方法已弃用,将从Hibernate 4中删除。 X)。在这种情况下,将使用Session关闭连接。

或者也许只是使用已建议的Session#createSQLQuery(String)

实际上,提供更多的上下文信息(你是否在模板中,你是否已经有一个Session,你会得到一个,等等)真的有助于找到最佳解决方案(它可能不是被选中的)。

另见

答案 1 :(得分:0)

我认为你需要做的就是正确处理你的会话(即冲洗它,关闭它,对你的设置有效)。

但为什么不使用Session的createSQLQuesry方法而不是直接连接?