오류 해결

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() 호출 시 순환참조를 막아주면 해결된다.