0

Hibernate 3 で Turbine 2.3.2 を使用しています。私の問題は、(Velocity 1.6.4) テンプレートが実行されているときに Hibernate セッションがアクティブでなく、Hibernate が遅延初期化を必要とするデータベースからデータにアクセスしていることです。したがって、LazyInitializationException - no Session エラーが発生します。

Velocity テンプレートの実行時に Hibernate セッションを有効にしたいので、Velocity テンプレートの前後にクラスを実行したいと考えています。このようにして、Hibernate セッションを 1 か所で開いたり閉じたりすることができました。(Hibernate で遅延初期化を無効にすることは、私にとってはオプションではありません)。Velocity テンプレートが実行される直前と直後に実行される一種のリスナーまたはフィルター (呼び出し方がわかりません) を作成するために、Turbine に関連する、または関連しない可能性はありますか? または、サーブレット コンテナがリクエストをフィルタリングすることもできます...どのオプションをお勧めしますか?

4

3 に答える 3

1

SpringOpenSessionInViewFilterを見てみてください。Hibernateセッションを開き、スレッドローカルに割り当てます。そうすれば、データアクセス層でそれを取得して使用できます。

于 2010-09-02T11:55:29.313 に答える
1

ビューでセッションを開くことは、クリーンなソリューションではありません。Hibernate が熱心に取得する必要がある関連付けパスを基準 (使用する場合) で構成できます。HQL を使用する場合は、セッションがまだ開いている間に関連付けを「タッチ」するだけです。

于 2010-09-02T13:46:02.837 に答える
0

あなたの質問は、(悪名高い) 有名な Open Session In View (OSIV) パターンに関するものです。JBoss wikiのOpen Session in Viewページを見てください。フィルター ベースの実装 (非 Spring ベース) が見つかります。

于 2010-09-02T13:42:47.857 に答える