[JPA] LazyInitializationException

CoHa·2021년 5월 9일
0

Open Session In View

Open Session In View 를 공부하고 우선 초기 세팅은 false 로 설정했었다.

엔티티에 조인을 걸고 Controller를 통해 Entity 정보를 받아오려는 순간, Exception 이 발생했다.

failed to lazily initialize a collection of role: com.coha.toy.reservation.category.entity.Category.products, could not initialize proxy - no Session;

문제 원인

위 문제는 왜 발생했을까?

초기에 Open Session In View 를 false 로 설정해뒀다. 그렇다면 스프링 컨테이너는 트랜잭션 범위의 영속성 컨텍스트 전략을 기본으로 사용한다.

Category 라는 엔티티를 갖고왔는데 @OneToMany가 걸려있었고 @OneToMany는 fetch default 전략이 Lazy 이다.

그렇기 때문에 Controller로 가져온 Category Entity 는 준영속 상태이고 지연 로딩이었기 때문에 Controller Layer 에서는 Join이 걸린 엔티티를 가져오지 못했기 때문에 발생한 에러였다.

문제 해결

여기서 Open Session In View 를 true로 바꾸면 일단은 LazyInitializationException 은 해결된다.

하지만 양방향 매핑을 했을 경우 또 다른 문제가 발생한다. 이 부분은 다음 글에서 소개하고자 한다.

profile
백엔드 개발을 좋아하는 주니어 개발자

0개의 댓글

관련 채용 정보