[DEV] 기록

[Spring Data Jpa] java.lang.StackOverflowError

꾸준함. 2023. 9. 4. 15:03

개요

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

 

java.lang.StackOverflowError while saving JPA entities

I am using Spring JPA to save entities into a database. Below is code structure Customer.java @Entity @Table(name="customer") @Data public class Customer { @Id @GeneratedValue(st...

stackoverflow.com

 

반응형