개요
JPA 객체를 저장하는데 아래와 같은 에러가 발생했습니다.
java.lang.StackOverflowError: null
at com.ecomhunt.entities.Order.hashCode(Order.java:15) ~[classes/:na]
at java.base/java.util.AbstractSet.hashCode(AbstractSet.java:124) ~[na:na]
at com.ecomhunt.entities.Customer.hashCode(Customer.java:11) ~[classes/:na]
at com.ecomhunt.entities.Order.hashCode(Order.java:15) ~[classes/:na]
at java.base/java.util.AbstractSet.hashCode(AbstractSet.java:124) ~[na:na]
at com.ecomhunt.entities.Customer.hashCode(Customer.java:11) ~[classes/:na]
at com.ecomhunt.entities.Order.hashCode(Order.java:15) ~[classes/:na]
at java.base/java.util.AbstractSet.hashCode(AbstractSet.java:124) ~[na:na]
at com.ecomhunt.entities.Customer.hashCode(Customer.java:11) ~[classes/:na]
원인
에러가 발생한 원인은 Lombok의 @Data 애노테이션 때문이었습니다.
Entity가 다른 Entity와 연관관계가 있는 상태에서 둘 다 @Data 애노테이션이 붙어있을 경우 Lombok에서 생성하는 equals, hashCode, 혹은 toString 메서드가 서로를 순환 참조하는 문제가 발생합니다.
해결 방법
따라서, 이런 문제를 방지하기 위해 equals, hashCode, 그리고 toString 메서드를 순환참조하지 않도록 재정의하거나 굳이 해당 메서드들이 필요 없을 경우 @Data 애노테이션 대신 @Getter와 @Setter만 선언하는 것도 하나의 방법입니다.
참고
https://stackoverflow.com/questions/73078524/java-lang-stackoverflowerror-while-saving-jpa-entities
반응형
'[DEV] 기록' 카테고리의 다른 글
[elasticsearch] Limit of total fields [1000] in index has been exceeded (0) | 2023.09.11 |
---|---|
[Jackson 라이브러리] @JsonBackReference (0) | 2023.09.07 |
[Mac] 맥북에서 MAC 주소 확인하는 방법 (2) | 2023.08.31 |
[javascript] common-lang3의 ObjectUtils.isEmpty()와 같은 코드를 작성하고 싶다면? (0) | 2023.08.31 |
IT 분야 크리에이터 (14) | 2023.08.10 |