Hibernateを使っていてLazyInitializationExceptionで悩む

(())

((org.seasar.mayaa.impl.cycle.script.rhino.OffsetLineRhinoException: Wrapped org.hibernate.LazyInitializationException: could not initialize proxy - the owning Session was closed in script=
popup.popupUrl (/html/common/Popup.mayaa#write#4)))
の例外が発生。

参照できないオブジェクトへは、以下のような取得、リクエストスコープへの設定を行っていた。


基底クラス
  ↑継承
サブクラス

サブクラスで、Hibernateのセッション作成
データベースへのアクセスしオブジェクトを取得←まだSQLが発行されない?
リクエストスコープへオブジェクトをセット

基底クラスでHibernateセッションを閉じる

プレゼンテーション層で、オブジェクトを取得←ここで例外。セッションを閉じなければ、ここでSQLが遅延実行される。


基底クラスでHibernateのセッションを閉じてしまうのが、原因らしいけど。。
フィルターでトランザクションの開始、トランザクションの終了、セッションを閉じる処理を行えば良いのか。

うーん、ちょっと悩んで、そもそも遅延ロードっていらなくない?
という気が。

パフォーマンスを向上させるHibernateの特徴のひとつらしいが、
実装中、これが問題になってはまることが多くて、Hibernateに慣れてる人ならあたりまえのことでも、毎回はまってしまう。

で、

問題のテーブルのマッピングファイルのclass要素に、lazy="false"を設定。

例外は、解決された。