Разница между getSession() и getNewSession()

#java #hibernate #spring #orm #transactions

#java #переход в спящий режим #spring #orm #транзакции

Вопрос:

Используя SessionFactoryUtils от Spring для гибернации, в чем фактическая разница между getSession() и getNewSession()?

Я использовал getSession () в методе DAO, но когда он начал вызываться довольно часто, начала появляться куча исключений «Сессия закрыта». Я изменил его на getNewSession(…), и теперь, как будто эти проблемы исчезли… но все же, мне нужно знать.

Пожалуйста, объясните.

Комментарии:

1. Разве это не открывает новое соединение каждый раз, когда вы его вызываете?

Ответ №1:

getSession() попытается найти ранее существовавший сеанс, который привязан к текущему потоку, создавая его при необходимости. getNewSession() всегда будет создавать сеанс. Javadocs здесь: http://static.springsource.org/spring/docs/2.5.x/api/org/springframework/orm/hibernate3/SessionFactoryUtils.html .

Если вам кажется, что вы слишком часто получаете сообщение об ошибке «сессия закрыта», попробуйте найти, где ваша сессия освобождается.

Комментарии:

1. Хорошо, понял — getSession (…) является несколько более оптимизированным вариантом getNewSession (…). Теперь исключения session.closed исчезли, но у меня есть java.lang. Исключение NullPointerException в com.mysql.jdbc.PreparedStatement.fillSendPacket. Есть какие-нибудь подсказки?

2. @xantrus — задайте это как другой вопрос и предоставьте трассировку стека.