JPA 표준스펙에는 fetch join 대상에 별칭이 없지만 하이버네이트는 별칭을 허용한다.
즉 사용할수 있다가 결론이다.
하지만 표준스펙에 없다는 만큼 주의하여 사용해야한다.
애플리케이션에서 fetch join의 결과는 연관된 모든 엔티티가 있을것이라 가정하고 사용해야한다.
컬렉션 결과를 필터링를 하게되면 객체의 상태와 DB의 상태 일관성이 깨지기 때문에
사용을 하면 안되지만 일관성의 문제가 없다면 사용해도 상관은 없다가 3줄요약이다.
참고
해결방법
https://escapefromcoding.tistory.com/462
주석
별칭을 사용하지 않고 가져와서 애플리케이션에서 조작하여 DTO를 만들어서 원하는 결과를 뽑아낸다.
여러 테이블을 조인해서 엔티티가 가진 모양이 아닌 전혀 다른 결과를 내야 한다면, 페치 조인보다는 일반조인을 사용하고 필요한 데이터를 모아서 DTO로 변환하는 것이 효과적이다.
*N + 1이 터지는 곳만 fetch join을 사용해서 최적화를 하면 대부분의 문제를 해결 할 수 있다.
'Spring > JPA' 카테고리의 다른 글
[JPA] @MappedSuperclass (0) | 2022.03.25 |
---|---|
[JPA] Auditing (0) | 2022.03.24 |
[JPA] 기본 Annotation (0) | 2022.03.24 |