반응형
Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 세션이란
- java.lang.AssertionError
- 쿠키의 정의
- Testcode
- n+1
- optional
- 김영한
- jpa
- 인터셉터의 정의
- abap value in field Data Class error
- SpringMVC
- .orelseThrow
- 쿠키란
- MVC
- spring
- springSecurityFilterChain 오류
- 필터의 정의
- 세션의 정의
- Validation
- spring MVC
- application-properties
- 필터vs인터셉터
- 401오류
- @Controller
- 유연한 컨트롤러1 - v5
- 세션vs쿠키
- BindingResult
- 구글 보안 api 활용
- filter vs interceptor
- controller
Archives
- Today
- Total
ABAP DUMP ERROR 24시
@OneToMany 일 때 fetch join 시 data의 량이 늘어난다? 본문
반응형
정리
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
의 데이터가 나가는 것이다.
반응형
'[WEB]Back-end > JPA' 카테고리의 다른 글
SQL을 직접 사용하는 경우Q vs JPA (0) | 2022.05.18 |
---|---|
Fetch join 의 한계가 뭐야? (0) | 2022.01.24 |
Jpql fetch join 이 뭐야? ,N+1 예시 (0) | 2022.01.22 |
JPQL이 뭐야? 어떻게 사용해? (0) | 2022.01.21 |
@Inheritance(strategy=InheritanceType.SINGLE_TABLE) 전략 (0) | 2022.01.21 |
Comments