#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 — задайте это как другой вопрос и предоставьте трассировку стека.