如果我想使用SessionFactoryUtils直接获取Connection执行某些SQL语句,并加入同一个事务。 像这样:
SessionFactoryUtils.getDataSource(getSessionFactory()).getConnection();
//some logic after Connection retrieved
我必须自己关闭Connection吗?或者只是让它成为,Hibernate Session会为我处理它?</ p>
答案 0 :(得分:3)
如果我想使用
SessionFactoryUtils
直接获取Connection执行某些SQL语句,并加入同一个事务。 (...)我必须自己关闭Connection
吗?或者只是让它成为HibernateSession
将为我处理它?</ 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方法而不是直接连接?