Hibernate を ORM として使用しており、Hibernate 構成に次のプロパティがあります。
<property name="current_session_context_class">thread</property>
また、Generic Hibernate DAO lib を使用しています: http://code.google.com/p/hibernate-generic-dao
私のアプリケーション (Java EE Web アプリ) には、一定の間隔で継続的に実行され、DB からデータを取得して保存するバックグラウンド スレッドがあります。そのため、何らかのデータが入ってくるたびに、ユーザーにすばやく表示できます。
今の問題は、それが初めてしか機能しないことです。スレッドが初めて実行されると、セッションが閉じられます。バックグラウンド スレッドが 2 回目のフェッチを試みると、セッションは既に閉じられているため、エラーが発生します。
汎用 DAO ではセッションを注入できませんが、セッション ファクトリは注入できます。セッション ファクトリがスレッド プロパティを使用してセッションを選択すると、2 回目は閉じられたセッションが取得されます。
どうすればこの問題を解決できますか?
アップデート:
次の方法で、SessionFactoryImpl.java の getCurrentSession() をオーバーライドする必要がありますか?
はいの場合、 currentSessioncontext でセッションが閉じられていることを確認するように、新しいセッションを返します