일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- spring MVC
- 김영한
- 쿠키란
- BindingResult
- 필터의 정의
- 인터셉터의 정의
- 401오류
- filter vs interceptor
- java.lang.AssertionError
- 유연한 컨트롤러1 - v5
- 필터vs인터셉터
- Testcode
- spring
- MVC
- Validation
- controller
- 세션이란
- .orelseThrow
- jpa
- springSecurityFilterChain 오류
- abap value in field Data Class error
- @Controller
- 구글 보안 api 활용
- optional
- 세션의 정의
- SpringMVC
- 쿠키의 정의
- n+1
- application-properties
- 세션vs쿠키
- Today
- Total
ABAP DUMP ERROR 24시
Fetch join 의 한계가 뭐야? 본문
# 인프런 김영한의 자바 ORM 표준 JPA 프로그래밍 - 기본편을 개인적으로 정리한 글입니다.
정리
Q . Fetch,join의 한계가 뭐야?
1. as(Alias)를 통해 별칭을 줄 수 없다.
=> 정합성 장애를 일으킨다.
ex) "Select t From Team t join fetch t.members m" //m 같은거 사용 금지
2. 둘 이상의 컬렉션을 fetch join 할수 없다.
일대다, 다대다에서는 DATA의 뻥튀기가 생긴다.
만일 1:多:多 으로 fetch join을 한다면!!! //쓰레기 데이터들이 축적될 가능성이 높다.
3. Collection을 fetch join 하게 되면 페이징 API를 사용할수 없다.
setFirstResult(), setMaxResult()를 사용할수 없다.
일대다 같은 컬렉션을 fetch join g하게 되면 데이터가 증가하는데,
실무에서 자기의 생각대로 페이징을 하게 되면 데이터를 덜 가져올 확률이 매우 높기 떄문이다.
따라서 여러 테이블을 조인해서 엔티티가 가진 모양이 아닌 전혀 다른 결과를 내야 하면,
페치 조인 보다는 일반 조인을 사용하고 필요 한 데이터들만 조회해서 DTO로 반환하는 습관을 갖자.
살펴보기
Q . Fetch,join의 한계가 뭐야?
"select t From Team t join fetch t.members m where m.age > 10";
만일 다음과 같이 join fetch에 m 이라는 alias를 설정한다면
Team의 members Collection에 들어가게 되면 나머지 DATA가 Drop될 가능성이 존재한다.
즉 정합성 장애를 일으킬수 있다.
일반적으로 객체 그래프는 data를 모두다 조회하는 것이다.
따라서 일부를 가져오려면 Team.members에서 조회하는것이 아니라
처음부터 Member 일반 join 한 후 DTO를 따로 만들어 fetch join 하도록 하자.
'[WEB]Back-end > JPA' 카테고리의 다른 글
SQL을 직접 사용하는 경우Q vs JPA (0) | 2022.05.18 |
---|---|
@OneToMany 일 때 fetch join 시 data의 량이 늘어난다? (0) | 2022.01.22 |
Jpql fetch join 이 뭐야? ,N+1 예시 (0) | 2022.01.22 |
JPQL이 뭐야? 어떻게 사용해? (0) | 2022.01.21 |
@Inheritance(strategy=InheritanceType.SINGLE_TABLE) 전략 (0) | 2022.01.21 |