Ответ 1
Если вы используете спящий режим Dropwizard. Вам нужно добавить аннотацию @UnitOfWork
к вашему методу ресурсов. Дополнительная информация в руководстве по Dropwizard, главе hibernate.
Я получил исключение ниже, когда я использовал session.getCurrentSession()
.
Я упомянул
hibernate.current_session_context_class: managed
org.hibernate.HibernateException: No session currently bound to execution context
at org.hibernate.context.internal.ManagedSessionContext.currentSession(ManagedSessionContext.java:75)
at org.hibernate.internal.SessionFactoryImpl.getCurrentSession(SessionFactoryImpl.java:1014)
at io.dropwizard.hibernate.AbstractDAO.currentSession(AbstractDAO.java:36)
at io.dropwizard.hibernate.AbstractDAO.persist(AbstractDAO.java:149)
Я использую это с dropwizard
. Может кто-нибудь помочь мне решить это?
Если вы используете спящий режим Dropwizard. Вам нужно добавить аннотацию @UnitOfWork
к вашему методу ресурсов. Дополнительная информация в руководстве по Dropwizard, главе hibernate.
Можете ли вы попробовать: session.openSession()
- Он говорит, что hibernate всегда открывает новый сеанс, и вы должны закрыть его после выполнения операций. С помощью session.getCurrentSession()
hibernate возвращает сеанс, привязанный к контексту, который вам не нужно закрывать, и нужно только установить hibernate.current_session_context_class для потока.
Вы также можете настроить сеанс с SpringSessionContext
, если ваше приложение Spring.
Отредактируйте hibernate-cfg.xml
с помощью следующей строки:
hibernate.current_session_context_class=org.springframework.orm.hibernate3.SpringSessionContext
Что будет делать выше строка?
Создание класса контекста сеанса как "org.springframework.orm.hibernate3.SpringSessionContext" , Hibernate предположит, что он выполняется внутри транзакционного контекста Spring (т.е. через транзакционный аспект Spring), а Spring теперь будет управлять вашей транзакцией для вас. Однако, если вы вызываете getCurrentSession()
за пределами такого контекста, Hibernate будет генерировать исключение, жалуясь, что ни одна сессия не связана с потоком.