Что случилось с методом SessionFactoryUtils.getSession из Hibernate 4 в Spring 3.1.0?Что следует использовать вместо этого?sessionFactory.getCurrentSession () постоянно дает мне следующее исключение:
org.hibernate.HibernateException: No Session found for current thread at org.springframework.orm.hibernate4.SpringSessionContext.currentSession(SpringSessionContext.java:97) at org.hibernate.internal.SessionFactoryImpl.getCurrentSession(SessionFactoryImpl.java:883)
Есть подсказка?
Использование sessionFactory.getCurrentSession()
sessionFactory.getCurrentSession()
Я считаю, что концепция "текущего сеанса" появилась в Hibernate 3, SessionFactoryUtil была написана до того, как она существовала.
SessionFactoryUtil
Не уверен, почему его удалили, возможно, они реализовали лучший дизайн, используя org.hibernate.context.CurrentSessionContext Начиная с этого поста :
org.hibernate.context.CurrentSessionContext
... Просто используйте простой SessionFactory и используйте getCurrentSession метод для получения текущего сеанса транзакции (не используйте openSession !!!!) и вы готовы идти ...
Начиная с документации SessionFactory.getCurrentSession () :
The definition of what exactly "current" means controlled by the CurrentSessionContext impl configured for use.
Вы должны добавить пример свойства:
<prop key="hibernate.current_session_context_class">thread</prop>
на ваше фабричное отображение сеанса. (см. документацию гибернации для более подробной информации)
Исключение 'org.hibernate.HibernateException: No Session found for current thread' возникает, когда вы неправильно настроили разграничение транзакций с помощью Spring.
org.hibernate.HibernateException: No Session found for current thread
Обычно Spring открывает сеанс для вас при запуске транзакции, связывает его с ThreadLocal и повторно-использует его на время вашей транзакции.Когда ваша транзакция фиксируется, сессия закрывается (после того, как она была сброшена).Таким образом, вам не нужно совершать какие-либо вызовы SessionFactory класса самостоятельно.
SessionFactory
Обычно люди помещают @Transactional в класс (обычно это служба) и настраивают Spring для запуска и завершения.транзакции при вызовах методов для этого класса.
@Transactional