inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

스프링 데이터 JPA

JPA 프로그래밍 4. 관계 맵핑

양방향 관계 설정 시, @Data 어노테이션 관련 사용 질문 있습니다.

470

slr과르

작성한 질문수 10

0

우선 아래 질문 드렸는데 굉장히 빠른 답변 감사드립니다 ^^

한 가지 더 질문이 있습니다.

양방향 관계 설정 예제를 따라해보다가 @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 어노테이션 사용 관련 주의해야될 사항이 있는 것인가요?

감사합니다

java spring JPA

답변 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