org.hibernate.LazyInitializationException: failed to lazily initialize a collection of role: ItemModule.entity.member.Member.roles, could not initialize proxy - no Session
예외 발생 이유
- ItemModule.entity.member.Member.roles 에 접근하려 할 때 발생한 예외입니다.
- org.hibernate.LazyInitializationException은 member 조회까지는 성공했는데, Member.roles()에 접근하려고 할 때 영속성 컨텍스트가 종료되어 버리게 되어버린 것이 원인으로 인해 발생한 예외입니다.
- JPA에서 지연로딩을 하려면 항상 영속성 컨텍스트가 존재해야 하기 때문에 지연 로딩이 불가하다는 에러를 띄워주는 것입니다.
- 보통 하나의 작업 단위인 트랜잭션 외부에서 엔티티를 조회할 때 나타나는 에러 사항이라고 합니다.
해결 방법
- 따라서 접근하는 과정이 담긴 서비스 메소드에
@Transactional
어노테이션을 붙여줌으로써, 이 메소드는 하나의 작업단위를 수행하고 있다는 것을 명시해줌으로써 영속성 컨텍스트가 종료되지 않게 유지해주며 지연로딩이 진행될 수 있도록 변경하니 해결되었습니다.