페치조인 대상의 별칭 문의
456
작성한 질문수 4
안녕하세요. 기본편 수강마치고 강의 듣는 중에 의문점이 있어 질문드립니다.
기본편의 페치조인의 한계 강의에서는 "페치조인의 대상에는 별칭을 줄 수 없다." 고 하셨는데 지금 예제는 별칭을 포함하고 있어서요. (o.member m 과 o.delivery d)
제가 검색조건을 추가해서 테스트해보니 정상적으로 쿼리수행이 되었습니다. 아래는 제가 테스트해본 코드입니다.
public List<Order> findAllWithMemberDelivery(OrderSearch orderSearch) {
return em.createQuery("select o from Order o " +
"join fetch o.member m " +
"join fetch o.delivery d " +
"where (:status is null or o.status = :status) " +
"and (:name is null or m.name like :name)", Order.class)
.setParameter("status", orderSearch.getOrderStatus())
.setParameter("name", orderSearch.getMemberName())
.getResultList();
}
그리고 기본편의 강의에서는 페치조인에 별칭을 주는것의 위험성도 설명해주셨는데요. 지금같이 검색조건을 주는 경우에는 페치조인에 별칭을 줄 수 밖에 없는게 아닌지 궁금합니다.
기본편 강의를 다시 보니 OneToMany 에 대해서만 페치조인 별칭이 위험한 것으로 이해됩니다. 지금예제의 Order와 Member 관계처럼 ManyToOne 에서는 문제가 되지 않는 것인지.. 제가 이해한게 맞는지 확인 부탁드리겠습니다.
답변 2
4
안녕하세요. 헬로월드님^^ 좋은 질문입니다.
질문주신 것 처럼 ManyToOne, OneToOne 관계는 문제가 되지 않습니다^^ 이럴때는 fetch join에 별칭을 쓰면 쉽게 풀어낼 수 있는 상황이 많지요^^
그런데 설명드린 것 처럼 OneToMany에서 Many쪽을 줄이는 방식으로 fetch join을 사용하면, 객체와 데이터베이스 사이에, 데이터 정합성이 안맞기 때문에 문제가 발생할 수 있습니다. 이 부분만 조심하시면 됩니다.
(사실 ManyToOne, OneToOne도 left join으로 페치 조인하고 별칭을 사용해서 join on으로 데이터를 필터링 해버리면 DB에는 데이터가 있는데 객체에 조회한 결과는 오른쪽에 데이터가 없을 수 있어서 문제가 될 수 있습니다.)
결론은 order.getMember()나, member.getOrder()를 호출했을 때 조회된 데이터 수가 데이터베이스에 있는 데이터수와 같으면 문제가 없습니다!
감사합니다.
강의 관련 외 질문입니다.
0
65
2
SpringBoot4 + Hibernate7 모듈 등록 방법 공유
0
86
1
BeanCreationException
0
86
3
Update 후 UpdateMemberResponse 매핑할 때
0
46
1
트랜잭션을 사용 안 할 때 커넥션은 언제 가져오나요?
0
99
2
페이징 + 검색조건 관련해서 질문드립니다.
0
70
1
Query Dsl Q파일 질문입니다.
0
82
1
루트 쿼리라는것은
0
58
1
메서드를 분리하는 기준
0
62
1
findAllWithMemberDelivery 메서드 질문드립니다.
0
108
3
연관관계 매핑을 안 쓸 경우, 사용해야 하는 전략
0
83
2
fetch join과 영속화와 OSIV의 관계
0
84
2
Distinct 사용 전 결과에 대한 의문
0
113
2
레포지토리 계층에서의 트랜잭션에 대한 의문
0
56
1
영속성 컨텍스트 생명주기의 신기한 부분이 있습니다.
0
78
2
dto 필드 속 엔티티 여부
0
58
1
뷰템플릿 사용 시
0
76
2
Result 클래스 관련 질문
0
56
1
@PostConstruct 프록시 관련 질문드립니다
0
85
1
DTO 대신 Form 사용은 안되나요?
0
133
1
OSIV ON 상태일 때
0
96
1
fetch join VS fetch join 페이징 궁금증
0
179
2
양방향 연관관계 알아보는 법?
0
104
1
16강 17강 간단 정리 이게 맞을까요 ?
0
165
2





