org.hibernate.LazyInitializationException: could not initialize proxy - no Session 오류는 Hibernate에서 지연 로딩(Lazy Loading)을 사용할 때 발생하는 일반적인 문제다. 이 오류는 엔티티의 프록시를 초기화하려고 할 때 현재 세션이 활성화되어 있지 않거나 이미 닫혀 있기 때문에 발생한다.
해결 방법
- FetchType.EAGER:
즉시 로딩(Eager Loading) 사용: 문제가 되는 관계에 대해 즉시 로딩을 사용하도록 변경한다. @ManyToOne, @OneToMany 등의 관계 어노테이션에서 fetch 속성을 FetchType.EAGER로 설정한다. 하지만 이 방법은 N+1 같은 성능 이슈가 있기 때문에 권장하는 방식은 아니다
- 트랜잭션 범위 확장:
지연 로딩된 객체에 접근하는 코드가 트랜잭션 내부에서 실행되도록 한다. @Transactional 어노테이션을 메소드나 클래스에 추가하여 해당 메소드의 실행을 트랜잭션 범위 내에서 실행되도록 할 수 있다.
다음과 같이 @Transactional 어노테이션을 통해 트랜잭션 범위에서 조회를 실행한다면
세션이 닫혀서 발생하는 에러는 사라지게 된다