If I want to use SessionFactoryUtils
to get Connection directly to execute some SQL statement, and join the same transaction. (...) Do I have to close Connection
by myself? or just let it be and Hibernate Session
will handle it for me?
You are directly borrowing a connection from the pool here and there is no guarantee that a Session
would get the same IMO. You are thus responsible for closing that connection properly and I'd suggest to use:
SessionFactoryUtils.getDataSource(getSessionFactory()).closeConnection(conn);
If you want to work with the connection managed by a Session
, use Session#doWork(Work)
(this new API replaces the old Session#connection()
method which is deprecated and will be removed from Hibernate 4.x). In that case, the connection will be closed with the Session
.
Or maybe just use Session#createSQLQuery(String)
as already suggested.
Actually, providing more context information (are you in a template, do you already have a Session, will you get one, etc) would really help to find the best solution (it might not be the chosen one).
See also