OpenEntityManagerInViewFilter

배세훈·2021년 8월 15일
0

Spring

목록 보기
9/38

OpenEntityManagerInViewFilter란?

요청의 전체 처리를 위해 JPA EntityManager를 스레드에 바인딩하는 서블릿 필터. "Open EntityManager in View" 패턴, 즉 원래 트랜잭션이 이미 완료되었음에도 불구하고 웹 보기에서 지연 로드를 허용하기 위한 것입니다.

JPA를 사용하다보면 @OneToMany나 @ManyToMany 등의 어노테이션을 이용해 객체간 부모자식 관계가 맺어져 하위 객체가 List나 Set과 같은 가변배열이 되는데 toString() 메소드를 이용해 출력을 하다 보면 다음과 같은 LazyInitializationException이 발생하게 된다.

Hibernate를 이용하는 경우 web.xml에 OpenSessionInViewFilter 클래스를 적용해 해결할 수 있다.

<filter>
	<filter-name>openSessionInViewFilter</filter-name>
    <filter-class>org.springframework.orm.hibernate3.support.OpenSessionInViewFilter</filter-class>
</filter>

<filter-mapping>
	<filter-name>openSessionInViewFilter</filter-name>
    <servlet-name>myAction</servlet-name>
</filter-mapping>

Spring Data에서 JPA를 사용한다면 Spring orm에서 제공하는 OpenEntityManagerInViewFilter를 적용해 문제를 해결할 수 있다.

<filter>
	<filter-name>OpenEntityManagerInViewFilter</filter-name>
    <filter-class>org.springframework.orm.jpa.support.OpenEntityManagerInViewFilter</filter-class>
</filter>

<filter-mapping>
	<filter-name>OpenEntityManagerInViewFilter</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>
  • spring-orm-x.x.x.jar가 있어야 함
profile
성장형 인간

0개의 댓글