web-dev-qa-db-ja.com

現在実行コンテキストにバインドされているセッションはありません

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と一緒に使用します。誰かがこれを解決するのを手伝ってくれる?

19
Srinivas

Dropwizard Hibernateを使用している場合。追加する必要があります@UnitOfWorkアノテーションをResourceメソッドに追加します。 dropwizardマニュアル、hibernateチャプター 内の詳細情報。

50
yunspace

session.openSession()-常に新しいセッションを開くようにhibernateに指示し、操作が完了したら閉じる必要があります。 session.getCurrentSession()を使用すると、hibernateは、閉じる必要がなく、hibernate.current_session_context_classをスレッドに設定するだけでよいコンテキストにバインドされたセッションを返します。

アプリケーションがSpringベースの場合は、SpringSessionContextを使用してセッションを構成することもできます。

以下の行で_hibernate-cfg.xml_を編集します。

_hibernate.current_session_context_class=org.springframework.orm.hibernate3.SpringSessionContext
_

上記の行は何をしますか?

セッションコンテキストクラスを"org.springframework.orm.hibernate3.SpringSessionContext"にすると、Hibernateは、Springトランザクションコンテキスト内で(つまり、Springトランザクションアスペクトを通じて)実行していると想定し、Springがあなたのためのトランザクション。ただし、そのようなコンテキストの外でgetCurrentSession()を呼び出すと、Hibernateは例外がスローされ、セッションがスレッドにバインドされていません。

3
Arpit