강의

멘토링

커뮤니티

Cộng đồng Hỏi & Đáp của Inflearn

Hình ảnh hồ sơ của jh85799122
jh85799122

câu hỏi đã được viết

Trong thực tế! Spring Boot và JPA Usage 2 - Phát triển API và tối ưu hóa hiệu suất

Truy vấn đơn hàng đơn giản V4: Truy vấn trực tiếp từ JPA đến DTO

inner join과 join fetch 차이 관련

Đã giải quyết

Viết

·

909

1

안녕하세요

fetch join과 inner join 차이점이 궁금해서

fetch join을 inner join으로 쿼리를 바꾸었는데 v2처럼 n+1 문제가 발생했습니다.

fetch 조인을 사용하면 fetch join을 사용한 엔티티에 대해 영속성 컨텍스트가 갱신되는데

inner join을 사용해면 join한 엔티티와 관련되 데이터를 가져올텐데 영속성 컨텍스트을 갱신하지는 않는 건가요?

감사합니다!

JPAspring-bootjavaspring

Câu trả lời 5

2

yh님의 프로필 이미지
yh
Người chia sẻ kiến thức

네 jpql말고 실제 실행된 sql을 비교해보시겠어요^^?

2

yh님의 프로필 이미지
yh
Người chia sẻ kiến thức

네 좋은 질문입니다.

fetch join과 inner join의 select 절을 잘 보시면 둘의 차이를 확실히 이해할 수 있을꺼에요^^

한번 둘을 자세히 비교해보시고 그대로 이해가 잘 안되면 다시 질문주세요^^

0

yh님의 프로필 이미지
yh
Người chia sẻ kiến thức

ㅎㅎ 한번에 이해하셨군요^^!

0

jh85799122님의 프로필 이미지
jh85799122
Người đặt câu hỏi

아 실제 sql 확인하고 이해했습니다.
늦은시간인데 죄송합니다ㅜ

0

jh85799122님의 프로필 이미지
jh85799122
Người đặt câu hỏi

public List<Order> findAllWithMemberDelivery() {
return em.createQuery(
"select o from Order o" +
" join fetch o.member m" +
" join fetch o.delivery d", Order.class)
.getResultList();
}
public List<Order> findAllWithMemberDelivery() {
return em.createQuery(
"select o from Order o" +
" inner join o.member m" +
" inner join o.delivery d", Order.class)
.getResultList();
}

제가 비교했던 쿼리는 위 두 쿼리인데 fetch를 사용하건 inner join을 사용하건 member와 delivery와 관련된 데이터를 가져올 거라고 생각을 했는데 inner join을 사용한 경우에만 n+1 문제가 발생했습니다.

단순히 fetch 조인을 사용했을때에만 jpa 영속성 컨텍스트가 갱신된다고 이해하면 될까요?

매번 상세한 답변 감사합니다.

Hình ảnh hồ sơ của jh85799122
jh85799122

câu hỏi đã được viết

Đặt câu hỏi