오류
[오류]org.hibernate.LazyInitializationException: failed to lazily initialize a collection of role
김쓰로그
2022. 12. 2. 13:31
오류상황
개인공부를 위한 프로젝트에서 프로젝트 실행이전, DB에 데이터를 넣어주기 위해 CommandLineRunner 인터페이스를 상속받은 SetUp 클래스를 실행시켰습니다.
# SetUp 클래스는 아래와 순서로 동작을 합니다.
- 팀 객체 생성 후 DB에 저장
- 팀 객체 조회 후 생성한 멤버 객체와 연관관계를 맺은 후 DB에 저장
이 때 DB에 저장한 팀을 조회해서 생성한 멤버와 연관관계 메서드를 통해 연관관계를 맺어주려 했는데 이 때 오류가 발생했습니다.
private void setTeam(Team team) {
this.team = team;
team.getMembers().add(this);
}
=> team.getMembers()에서 오류 발생
오류해석
failed to lazily initialize a collection of role:
study.querydsl.team.domain.Team.members, could not initialize proxy - no Session
즉, 지연로딩에 실패했다는 것입니다.
저는 해당 클래스에 @Transactional 어노테이션을 걸어주지 않았습니다.
그럼 이때 트랜잭션은 각각의 메서드(save, findById)가 실행될 때 발생합니다.
따라서 영속성 컨테스트도 각각의 메서드 단위로 실행되었다가 종료됩니다.
즉, 실행시키려하는 SetUp클래스에 메서드를 트랜잭션으로 묶어주면 해결이 됩니다!!
=> @Transactional 어노테이션을 걸어주면 해결됩니다!!