한번의 쿼리로 원하는 데이터를 조회한다!
컨트롤러상에서 V2, V3는 똑같지만 그 내부에서 동작한는 게 다르다!
‼️xToOne fetch join과 컬렉션 fetch join 다른점(유의점)
페이징 불가!!! - limit offset이 나와야하는데 안 나온다!
컬렉션 페치 조인은 1개만 사용 가능
오류 메시지 출력
일단 데이터는 조회하지만 그 데이터들을 메모리에서 페이징 처리한다!
=>실무에서 데이터가 1만개라면 메모리초과 나서 큰일 난다!
일대다 join을 하는 순간 order의 기준 자체가 틀어진다!
우리가 원하는 데이터 : 2개
실제 DB의 데이터 : 4개
이므로 페이징할 경우 원하는 결과가 제대로 나오지 않는다!
우리가 원하는, 예상하는 데이터는 2개이기 때문에 0부터 2개 가져와라고 할 수 있지만
DB SQL입장에서는 페이징은 Order가 아니라 OrderItem과 조인된, 즉 OrderItem 테이블에 페이징이 적용된다!!!
=>그러므로 페이징 자체가 불가능해진다!
=>중간에서 갯수를 못 맞춘다! 2 vs 4
그래서 hibernate는 WARN 을 내고 메모리에서 해준다.(아주 위험‼️ 절대 사용❌)
데이터가 작은 경우는 괜찮지만, 실무에서 데이터가 많은데 해버리면 메모리 초과 발생!
따라서 일대다 관계에서는 다에 의해 데이터가 늘어나므로 페이징❌
2. 컬렉션 페치 조인은 1개만 사용할 수 있다. 컬렉션 둘 이상에 페치 조인을 사용하면 안된다. 데이터가 부정합하게 조회될 수 있다. 자세한 내용은 자바 ORM 표준 JPA 프로그래밍을 참고하자.
=>데이터가 증가하는 건 물론이고, 데이터 갯수나 정합성이 안 맞을 수 있다!
ex) 일대다(N) * 일대다(M) = N * M 꼴이다!