7月24日学習日誌
1590 ワード
ヒベルナセッションの解決が終了しました.遅延ローディングをfalseに設定するのは解決策ですが、効率はやや低く、特に実体クラスに多くの集合属性がある場合は.このようにすることができます.スプリングで提供されたフィルターを使って、セッションのライフサイクルを延長して、jsp層まで行っても、セッションは有効です.
また、OpenSession InViewelterというフィルターをオンするとFush ModeはデフォルトでMANUALに設定されます.Flaush ModeがMANUALまたはNEVELであれば、操作中にhibernateはトランザクションをreadonlyに設定しますので、追加、削除または修正操作中にエラーが発生します.解決策はそのfilterにこのコードを加えるだけでいいです.
<filter>
<filter-name>openSessionInviewFilter </filter-name>
<filter-class>org.springframework.orm.hibernate3.support.OpenSessionInViewFilter </filter-class>
</filter>
<filter-mapping>
<filter-name>openSessionInviewFilter </filter-name>
<url-pattern>/* </url-pattern>
</filter-mapping>
私もこのようにしています.web.xmlにはもともとstruts 2のフィルターがあります.そして濾過したのは同じです.<filter>
<filter-name>struts2</filter-name>
<filter-class>
org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter
</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
実験したところ、前者を後者の前に置くと効果的だということが分かりました.逆は無効です.その原因についてはよく分かりません.知っている人がいたら、教えてください.また、OpenSession InViewelterというフィルターをオンするとFush ModeはデフォルトでMANUALに設定されます.Flaush ModeがMANUALまたはNEVELであれば、操作中にhibernateはトランザクションをreadonlyに設定しますので、追加、削除または修正操作中にエラーが発生します.解決策はそのfilterにこのコードを加えるだけでいいです.
<param-name>flushMode</param-name>
<param-value>AUTO</param-value>
</init-param>