[Spring] failed to lazily initialize a collection of role

yoon·2024년 6월 11일

spring-boot

목록 보기
34/41
post-thumbnail

❌ 에러 상황

failed to lazily initialize a collection of role: org.delivery.api.domain.userorder.orderMenus, could not initialize proxy - no Session

지연 로딩된 엔티티를 초기화하지 못해서 Hibernate에서 발생하는 예외이다.

이를 해결려면 지연 로딩을 즉시 로딩으로 변경하거나, transaction 환경을 만들어주면 된다. JPA에서 지연 로딩은 영속성 컨텍스트가 있어야 하기 때문!!

지연 로딩 vs 즉시 로딩

  • 지연 로딩 (fetch = FetchType.LAZY)
    연관된 엔티티를 실제 사용하는 시점에 데이터베이스에서 조회한다.
    즉 연관된 객체에 프록시 객체를 넣어두고, 데이터가 필요한 순간 데이터 베이스에서 조회하는 방식이다.
  • 즉시 로딩 (fetch = FetchType.EAGER)
    엔티티를 조회할 때 연관된 엔티티도 함께 조회한다.
    즉시 로딩을 최적화하기 위해 가능하면 조인 쿼리를 사용한다.

✅ 해결

문제가 발생하는 서비스 로직에 @Transactional을 사용해주니 간단히 해결된다.

profile
하루하루 차근차근🌱

0개의 댓글