Должен ли я закрыть соединение при использовании SessionFactoryUtils - PullRequest
1 голос
/ 05 августа 2010

Если я хочу использовать SessionFactoryUtils, чтобы получить Соединение напрямую для выполнения некоторого оператора SQL и присоединиться к той же транзакции. Как это:

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

Должен ли я сам закрывать соединение? или просто пусть это будет и Hibernate Session справится с этим для меня?

Ответы [ 2 ]

3 голосов
/ 05 августа 2010

Если я хочу использовать 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), как уже предлагалось.

На самом деле, предоставление дополнительной контекстной информации (есть ли вы в шаблоне, есть ли у вас уже сеанс, получите ли вы его и т. Д.) Действительно помогло бы найти лучшее решение (это может быть не выбранное).

Смотри также

0 голосов
/ 05 августа 2010

Я думаю, что все, что вам нужно сделать, это правильно обработать ваш сеанс (то есть очистить его, закрыть его, все, что подходит для вашей установки).

Но почему бы не использовать createSQLQuesry метод сеанса вместо получения прямого соединения?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...