実際にそれを行うことができ、Spring と Hibernate を使用する場合の一般的なパターンです。以下のコードを web.xml に入れることで、非常に簡単に有効にすることができます。
<filter>
<filter-name>lazyLoadingFilter</filter-name>
<filter-class>org.springframework.orm.hibernate3.support.OpenSessionInViewFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>lazyLoadingFilter</filter-name>
<url-pattern>/mvc/*</url-pattern>
</filter-mapping>
これを配置すると、その呼び出し内で行われた休止状態のすべての呼び出しで同じセッションが使用されます。
@Autowired
protected SessionFactory sessionFactory;
protected Session getSession() {
return SessionFactoryUtils.getSession(sessionFactory, true);
}
ただし、Peter Gwiazda が言うように、アプリケーションの規模と複雑さに応じて、これを実行したい場合と実行したくない場合があります。オブジェクトが非常に複雑であるように思われるため、JSP 内のエンティティをトラバースするときにビューが本質的により多くの SQL ステートメントをトリガーするか、優れたパフォーマンスにつながらないようです。
一般に、ビューが必要とするものだけを使用してオブジェクトを DTO に変換し、データベースから取得するデータの量を制限することをお勧めします。