양방향 관계 설정 시, @Data 어노테이션 관련 사용 질문 있습니다.
470
작성한 질문수 10
우선 아래 질문 드렸는데 굉장히 빠른 답변 감사드립니다 ^^
한 가지 더 질문이 있습니다.
양방향 관계 설정 예제를 따라해보다가 @OneToMany 조건으로 사용되는 Account 객체에 getter/setter 메서드를 별도로 설정하지 않고 Lombok의 @Data 어노테이션을 사용하였습니다.
이때, Convenient Method를 선생님과 동일하게 입력을 하니 아래와 같이 StackOverflowError가 발생이 됩니다.
java.lang.StackOverflowError: null<p> at java.util.HashMap$KeyIterator.<init>(HashMap.java:1451) ~[na:1.8.0_31]
at java.util.HashMap$KeySet.iterator(HashMap.java:912) ~[na:1.8.0_31]
at java.util.HashSet.iterator(HashSet.java:172) ~[na:1.8.0_31]
at java.util.AbstractSet.hashCode(AbstractSet.java:122) ~[na:1.8.0_31]
그래서 아래와 같이 Optional 조건이라고 하신 객체 설정 부분을 주석 처리를 하니 에러가 발생이 안되고 정상 처리 됩니다.
public void addStudy(Study study) {
// this.getStudies().add(study);
study.setOwner(this);
}
JPA 사용시 @Data 어노테이션 사용 관련 주의해야될 사항이 있는 것인가요?
감사합니다
답변 1
3
아주 좋은 질문입니다. @Entity에 @Data를 쓰시면 StackOverFlow를 보기 쉽상입니다. 이유인 즉슨, @Data가 기본으로 생성해주는 toString이나 hashCode 그리고 equals에서 "모든 프로퍼티"를 사용해서 값을 구하는데, 그 때 양방향 관계 때문에 무한 루프가 생길 수 있습니다. A->B->A->B 이런식으로요. 그래서 보통 @Entity위에는 @Data를 사용하는 것은 권장하고 싶지 않습니다.
롬복 애노테이션 설정 중에 @EqualsAndHashCode와 @ToString인가, 이 두 애노테이션에 보면 어떤 프로퍼값을 사용해서 그 메소드들을 구현할지 정해줄 수 있습니다. 저는 거기에보통 of="id" 라는 설정을 사용해서 id 값만 가지고 만들도록 설정해서 사용합니다.
좋은 질문 감사합니다. (마침 운좋게 제가 접속해 있을 때 질문이 올라왔네요.)
spring boot 2.7.13-SNAPSHOT trace 소문자 로그 안나옴
0
533
1
<스프링 데이터 Common: 기본 리포지토리 커스터마이징> 에 대한 질문
0
392
1
comment table에서 저장될떄 왜 id값이 2부터저장이되는건가요?
0
407
1
@EnableJpaRepositories 설정을 스프링부트가 어디에서 자동설정하나요?
0
451
0
PersistenceContext 관련 질문드립니다.
0
335
1
지금(Eager), 나중에(Lazy)의 의미를 모르겠습니다
0
338
1
transaction 구간이 길어질 경우의 처리방법 문의드립니다.
0
905
1
docker postgres
0
293
1
Multiple DataSource 사용 시 transaction 관련 질문 드립니다.
0
2908
1
entity 중 null이 아닌 필드만 update 할 방법이 있을까요?
0
1191
1
Eager 모드일 경우, join을 inner join으로 바꾸는 법이 있을까요?
0
385
1
엔티티를 상속받는 DTO가 일반적인가요?
1
1847
1
커스텀 타입 클래스를 String 타입 처럼 이용해 쿼리하는 방법에 대해 질문하고 싶습니다.
0
339
1
연관관계 매핑 어떤식으로 해야될지 감이 안잡힙니다.
0
566
4
EntityManager 주입시 Annotation관련 질문드립니다.
0
565
1
클래스 기반 프로젝션 사용 관련 질문
0
560
1
save 메서드 질문드립니다.
0
258
1
복잡한 통계쿼리도 JPA로 가능한가요?
2
5593
1
find 와 get의 차이가 무엇인가요?
0
890
1
실무에서 JPA 할 때 FK로 개발할때 연관관계를 꼭 맺어주어야 하나요?
0
999
1
\dt Did not find any relations.
0
481
1
소스코드는 어디서 볼 수 있을까요?
1
287
1
table 생성과 select 문에 대한 질문
0
174
1
스프링 데이터 RepositoryTest 관련 질문
0
2173
2





