less than 1 minute read

Untitled

발생한 오류

LazyInitializationException

오류 메시지

관련 코드:

VOC voc = vocService.findById(id);

원인: 이 오류는 Hibernate에서 엔터티의 속성이 지연 로딩(Lazy Loading)으로 설정되어 있을 때, 세션이 닫힌 후에 해당 속성에 접근하려고 할 때 발생한다. 여기서는 VOC 엔터티 내의 Customerkeepers 속성이 지연 로딩되어 있으며, 해당 속성에 접근하려 할 때 Hibernate 세션이 이미 종료되어 있어 발생하게 된다..

해결 방법:

  1. @Transactional 사용 : Service 메소드에서 @Transactional 어노테이션을 사용하여 해당 메소드가 트랜잭션 범위 내에서 실행되게 한다. 이렇게 하면 해당 메소드 내에서 지연 로딩을 사용하여 연관된 데이터를 가져올 수 있다.

    @Transactional
    public VOC findById(Long id) {
    return vocRepository.findById(id).orElse(null);
    }
    


  1. 명시적 초기화: Hibernate의 initialize 메소드를 사용하여 지연 로딩된 속성을 명시적으로 초기화할 수 있습니다. 이 방법은 지연 로딩된 객체가 실제로 필요한 경우에만 사용해야 한다.

    VOC voc = vocRepository.findById(id).orElse(null);
    if(voc != null) {
      Hibernate.initialize(voc.getCustomer().getKeepers());
    }
    

Leave a comment