Если я хочу использовать SessionFactoryUtils
, чтобы получить Соединение напрямую для выполнения некоторого оператора SQL и присоединиться к той же транзакции. (...) Должен ли я закрывать Connection
самостоятельно? или просто пусть это будет и Hibernate Session
справится для меня?
Вы напрямую заимствуете соединение из пула здесь, и нет никакой гарантии, что Session
получит то же IMO. Таким образом, вы несете ответственность за правильное закрытие этого соединения, и я бы предложил использовать:
SessionFactoryUtils.getDataSource(getSessionFactory()).closeConnection(conn);
Если вы хотите работать с соединением, управляемым Session
, используйте Session#doWork(Work)
(этот новый API заменяет старый метод Session#connection()
, который устарел и будет удален из Hibernate 4.x). В этом случае соединение будет закрыто с помощью Session
.
Или, может быть, просто используйте Session#createSQLQuery(String)
, как уже предлагалось.
На самом деле, предоставление дополнительной контекстной информации (есть ли вы в шаблоне, есть ли у вас уже сеанс, получите ли вы его и т. Д.) Действительно помогло бы найти лучшее решение (это может быть не выбранное).
Смотри также