Spring 3.0.2、hibernate3、およびjsf2を使用して、OpenSessionInViewFilterを機能させるのに大きな問題があります。
シナリオ:
いくつかの単純な情報プロパティ (string および int タイプ) とマップされた EmployeeEntities のリストを保持する BusinessCaseEntity があります。このリストは
fetch=FetchType.LAZY
まず、すべての BusinessCases のリストを読み込み、表に表示します。この目的のために、dao クラスを使用します。シンプルなプロパティを持つビジネスケースが表示されます。特定のビジネスケースを選択した場合、たとえば接続されている従業員を表示したいとします。したがって、ビジネスケース オブジェクトの getter メソッドを使用したいだけです --> getEmployees()
春と休止状態についての私の単純な理解では、この時点で BusinessCaseEntity がバックエンドで任意の春と休止状態 (セッション) から切り離され、有名な LazyLoadingException が表示されることがわかります。
これは、OpenSessionInViewFilter が配置されると私が思うところです。私はそれを使用する方法の多くの指示を読みましたが、それでも自分のアプリで動作させることができませんでした.
私のweb.xmlでフィルターを構成し、SpringのOpenSessionInViewFilterの小さなサブクラスを作成して、デバッグ目的で出力を行いました。
それでも、必要なデータをフェッチする段階になると、フィルターは新しいセッションを開き、LazyLoadException がスローされてからフィルターがセッションを閉じます。セッションが現在開いているときに LazyLoadException が発生するのはなぜですか?
2011-06-14 19:19:49,734 DEBUG HibernateFilter:239 - Using SessionFactory 'sessionFactory' for OpenSessionInViewFilter
2011-06-14 19:19:49,734 DEBUG HibernateFilter:66 - Opening single Hibernate Session in OpenSessionInViewFilter
Jun 14, 2011 7:19:49 PM com.sun.facelets.FaceletViewHandler handleRenderException
SEVERE: Error Rendering View[/web/caseDetails.xhtml]
org.hibernate.LazyInitializationException: failed to lazily initialize a collection of role: com.frivak.cat.db.entities.BusinessCaseEntity.caseClientList, no session or session was closed
at org.hibernate.collection.AbstractPersistentCollection.throwLazyInitializationException(AbstractPersistentCollection.java:383)
LOTS OF STACKTRACE ...
2011-06-14 19:19:49,879 DEBUG HibernateFilter:92 - Closing single Hibernate Session in OpenSessionInViewFilter
OpenSessionInViewFilter の目的を誤解していますか?
私は今かなり迷っており、本当に助けていただければ幸いです。
ありがとう - クリス