Spring: Почему класс SessionFactoryUtils в Hibernate 4 не предоставляет метод getSession? - PullRequest
8 голосов
/ 08 февраля 2012

Что случилось с методом 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)

Есть подсказка?

Ответы [ 4 ]

3 голосов
/ 03 мая 2012

Использование sessionFactory.getCurrentSession()

Я считаю, что концепция "текущего сеанса" появилась в Hibernate 3, SessionFactoryUtil была написана до того, как она существовала.

1 голос
/ 19 марта 2012

Не уверен, почему его удалили, возможно, они реализовали лучший дизайн, используя org.hibernate.context.CurrentSessionContext Начиная с этого поста :

... Просто используйте простой SessionFactory и используйте getCurrentSession метод для получения текущего сеанса транзакции (не используйте openSession !!!!) и вы готовы идти ...

Начиная с документации SessionFactory.getCurrentSession () :

The definition of what exactly "current" means controlled by the CurrentSessionContext impl configured for use.
0 голосов
/ 10 апреля 2012

Вы должны добавить пример свойства:

<prop key="hibernate.current_session_context_class">thread</prop>

на ваше фабричное отображение сеанса. (см. документацию гибернации для более подробной информации)

0 голосов
/ 08 апреля 2012

Исключение 'org.hibernate.HibernateException: No Session found for current thread' возникает, когда вы неправильно настроили разграничение транзакций с помощью Spring.

Обычно Spring открывает сеанс для вас при запуске транзакции, связывает его с ThreadLocal и повторно-использует его на время вашей транзакции.Когда ваша транзакция фиксируется, сессия закрывается (после того, как она была сброшена).Таким образом, вам не нужно совершать какие-либо вызовы SessionFactory класса самостоятельно.

Обычно люди помещают @Transactional в класс (обычно это служба) и настраивают Spring для запуска и завершения.транзакции при вызовах методов для этого класса.

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