오류 해결
java.lang.StackOverflowError: null - @Data
코딍코딍
2023. 1. 11. 15:41
원인
@Entity
@Data
public class Board {
...
@ManyToOne(fetch=FetchType.LAZY)
@JoinColumn(name = "user_id")
private User user;
...
}
@Entity
@Data
public class User {
...
@OneToMany(mappedBy = "user")
private List<Board> boards = new ArrayList<>();
...
}
User나 Board를 출력할 때 문제발생!
위 코드를 보면 User, Board 둘 다 @Data이 선언되어있다. User와 Board는 양방향 관계이기때문에 어느 한 쪽에서 toString()을 호출하는 경우 순환참조 문제가 발생하여 StackOverflowError가 발생하는 것이다.
해결방법
@Entity
@Data
@ToString(exclude = "user")
public class Board { ... }
User 또는 Board 둘 중 하나의 클래스에 @ToString(exclude = "")를 선언하여 toString() 호출 시 순환참조를 막아주면 해결된다.