ABAP DUMP ERROR 24시

Fetch join 의 한계가 뭐야? 본문

[WEB]Back-end/JPA

Fetch join 의 한계가 뭐야?

이운형 2022. 1. 24. 02:00
반응형

# 인프런 김영한의 자바 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 하도록 하자

반응형
Comments