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 Hibernateを使用している場合。追加する必要があります@UnitOfWork
アノテーションをResourceメソッドに追加します。 dropwizardマニュアル、hibernateチャプター 内の詳細情報。
: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は例外がスローされ、セッションがスレッドにバインドされていません。