🟦 기본 환경: IDE: IntelliJ, Language: Java
SpringBoot의 MainApplication에서 다음 Source Code를 실행할 경우,
1
2
3
4
5
6
7
|
@GetMapping("/")
public List<Item> list() {
List<Item> items = itemStoryService.itemList();
System.out.println(items)
return items;
}
|
🚨 다음과 같은 Error 발생
java.lang.StackOverflowError: null
발생 원인
@Data: 클래스의 Getter, Setter, equals(), hashCode(), toString() 등의 메서드를 자동으로 생성
클래스 내의 모든 필드를 포함한 문자열을 생성하기 위해 각 필드의 toString() 메서드를 호출
→ 클래스 내에 상호참조되는 관계가 있을 경우, 한 객체의 toString() 메서드에서 다른 객체의 toString() 메서드를 호출
→ 그 객체에서 다시 처음의 객체의 toString() 메서드를 호출(상호 참조 관계이므로)
→ 무한한 재귀 호출로 이어져 StackOverflowError가 발생
해결 방법
1. Entity의 @Data를 @Getter, @Setter로 수정
2. @ToString(exclude = "재 호출하는 entity 이름") 옵션 추가
⭐ 정리
println() → valueOf() → toString() 호출
→ EntityA의 모든 필드에 대해 문자열화를 위해 필드로 선언된 EntityB의 toString 호출
→ EntityB의 toString()는 EntityB의 모든 필드에 대해 문자열화를 위해 필드로 선언된 EntityA의 toString 호출
→ 무한 반복
참고 자료
'Java > JPA with Error' 카테고리의 다른 글
[해결 방법] java.sql.SQLIntegrityConstraintViolationException (0) | 2023.06.25 |
---|---|
[해결 방법] org.springframework.http.converter.HttpMessageNotWritableException (0) | 2023.06.18 |
[해결 방법] org.hibernate.hql.internal.ast.QuerySyntaxException (0) | 2023.05.29 |
[해결 방법] org.hibernate.DuplicateMappingException (0) | 2023.05.23 |
[해결 방법] javax.persistence.TransactionRequiredException (0) | 2023.05.21 |