Подтвердить что ты не робот

Нет сеанса, связанного в настоящее время с контекстом выполнения

Я получил исключение ниже, когда я использовал 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. Может кто-нибудь помочь мне решить это?

4b9b3361

Ответ 1

Если вы используете спящий режим Dropwizard. Вам нужно добавить аннотацию @UnitOfWork к вашему методу ресурсов. Дополнительная информация в руководстве по Dropwizard, главе hibernate.

Ответ 2

Можете ли вы попробовать: 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 будет генерировать исключение, жалуясь, что ни одна сессия не связана с потоком.