2013-07-29 3 views
1

Я использую Hibernate и Spring MVC для этого проекта.(Hibernate) Разница между Session.close() и releaseSession (Session)

У меня есть этот кусок кода:

... 

int count = (Integer) this.getSession().createSQLQuery(sql).list().get(0); 

this.getSession().close(); 

return count; 

я должен использовать this.getSession.close(), или я должен использовать releaseSession(this.getSession()) ??

I'm, имеющие проблемы, понимающие разницу между этими двумя методами ..

СПАСИБО!

+0

Откуда берутся эти магические методы 'releaseSession'? –

+0

http://static.springsource.org/spring/docs/1.2.x/api/org/springframework/orm/hibernate3/support/HibernateDaoSupport.html#releaseSession(org.hibernate.Session) –

+3

Хорошо, тогда есть ваш ответ: _Закройте данный сеанс Hibernate, созданный через SessionFactory этого DAO, ** если он не связан с потоком ** (т. Е. Не является транзакционным сеансом) ._ (выделено мной). Метод 'close' будет ** всегда ** закрывать' session'. Метод 'releaseSession' только закрывает' session', если это необходимо. Если вы закрываете сеанс, связанный с потоком, тогда у вас будут проблемы в другом месте вашего приложения, так как Spring не ожидает, что он будет закрыт. –

ответ

2

HibernateDaoSupport - это поддержка, предоставляемая платформой Spring, и когда вызывается функция releaseSession(), она завершает сеанс hibernate, а не транзакцию. Но когда вы выполняете session.close() спящего режима, он также прекращает транзакцию. Я думаю, вам не нужно обрабатывать эти транзакции самостоятельно. Просто дайте весне справиться с ними. @Transactional будет обрабатывать их. Просто определите его там, где это необходимо.

Смежные вопросы