생성일: 2022년 2월 12일 오후 11:44
💡 오늘은 project를 하는 과정에서 생긴 문제를 이야기 해볼려 한다.
Hibernate에서 지연 로딩을 사용하는 동안 세션이 없다는 예외에 직면하였다.
하지만 본질적으로 다른 곳에서 문제가 발생하였다고 생각!
JPA 문서를 찾아 보면서 지연로딩 문제 분류를 찾아 보았다! 답은 Hibernate에서 열린 세션이 필요합니다. 하지만 이는 트랜잭션이 닫힌 후 두번 째 LazyInitializationException 이 발생할 수 있다.
공식 문서
권장되는 접근 방식은 단일 트랜잭션에서 데이터 검색이 발생하도록 애플리케이션을 설계하는 것입니다. 그러나 로드된 항목과 로드되지 않은 항목을 판별할 수 없는 코드의 다른 부분에서 게으른 엔터티를 사용할 때 때때로 어려울 수 있습니다.
Hibernate에는 해결 방법인 enable_lazy_load_no_trans 속성이 있습니다. 이것을 켜면 지연 엔티티를 가져올 때마다 임시 세션이 열리고 별도의 트랜잭션 내에서 실행됩니다.
해결법
spring.jpa.properties.hibernate.enable_lazy_load_no_trans=true
를 추가 하자!!
이 구성을 활성화하면 LazyInitializationException 이 사라질 수 있지만 세션이 닫히기 전에 모든 속성이 올바르게 초기화되도록 보장하는 가져오기 계획을 사용하는 것이 좋습니다.