ABAP DUMP ERROR 24시

@OneToMany 일 때 fetch join 시 data의 량이 늘어난다? 본문

[WEB]Back-end/JPA

@OneToMany 일 때 fetch join 시 data의 량이 늘어난다?

이운형 2022. 1. 22. 07:35
반응형

정리

Q. @OneToMany 일 때 fetch join 시 data의 량이 늘어가는 이유?

One의 입장에서 Many를 부를때 One에 해당되는 Many 마다 결과값을 출력해줘야 하므로

출력되는 양이 많아진다. 

 

Q. 해결 방법은?

distinct를 사용해서 중복을 제거한다.

"select distinct t From Team t join fetch t.members"

Q. 중복 제거하니까 무조건 OneToMany는  distinct를 써야하네?

사용자의 Needs가 다를수 있으니 상황에 맞춰 쓰자!

 

살펴보기


Id(PK) Name
1 팀A
2 팀B
3 팀C

<TEAM> // One

 

Id(PK) TEMA_ID(FK) NAME
1 1 회원1
2 1 회원2
3 2 회원3
4 NULL 회원4

 

<MEMBER> // Many

 

 

Query를 

"select t From Team t join fetch t.members"
System.out.println("team = " + team.getName() + "/" + team.getMembers().size());

다음과 같이 했더니

team = 팀A/2

team = 팀A/2

team = 팀B/1

 

처럼 중복된 결과값이 나왔다?

 

그 이유는 One 인 Team을 조회할때 

팀A을 가지고있는 Many인 Member는 2개이므로

Member 쿼리가 회원1 따로 회원2 따로 해서 

 

team = 팀A/2 // 회원1

team = 팀A/2 // 회원2

의 데이터가 나가는 것이다.

 

 

 

반응형
Comments