7月24日学習日誌

1590 ワード

ヒベルナセッションの解決が終了しました.遅延ローディングをfalseに設定するのは解決策ですが、効率はやや低く、特に実体クラスに多くの集合属性がある場合は.このようにすることができます.スプリングで提供されたフィルターを使って、セッションのライフサイクルを延長して、jsp層まで行っても、セッションは有効です.
 
<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>