인프런 영문 브랜드 로고
인프런 영문 브랜드 로고

인프런 커뮤니티 질문&답변

그리즐리님의 프로필 이미지
그리즐리

작성한 질문수

실전! 스프링 데이터 JPA

@EntityGraph

EntityGraph 에서 복합키 조회시 질문드립니다.

작성

·

145

0

 

public class Product {
@Id
Long productId;

String name;
}

public class Member {
@Id
Long uid;

String name;
}

public class MemberInterest{
@Id
Long sequence;

@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "uid", insertable = false, updatable = false, referencedColumnName = "wine_id")
Member member;

@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "product_id", insertable = false, updatable = false, referencedColumnName = "wine_id")
Product product;

int ratingPoint;
}

public class PurchaseHistory {
@Id
Long sequence;

@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "uid", insertable = false, updatable = false, referencedColumnName = "wine_id")
Member member;

@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "product_id", insertable = false, updatable = false, referencedColumnName = "wine_id")
Product product;

@ManyToOne(fetch = FetchType.LAZY)
@JoinColumns({
@JoinColumn(name = "uid", referencedColumnName = "uid", insertable = false, updatable = false),
@JoinColumn(name = "wine_id", referencedColumnName = "wine_id", insertable = false, updatable = false)
})
MemberInterest memberInterest;
}

안녕하세요 강사님

강사님의 여러 강의를 잘 듣고있습니다.

질문이 두가지 있는데요 위와 같은 관계가 있다고 가정할 때

아래와같이 구매이력을 EntityGraph를 통해 가져오려고 합니다.

@Repository
public interface PurchaseHistoryRepository extends JpaRepository<PurchaseHistory, Long> {
@EntityGraph(attributePaths = {"member", "product", "memberInterest"})
Page<PurchaseHistory> findByUid(String uid, Pageable pageable);
}

하지만 실제로 동작시 MemberInterest 부분에서 N+1 문제가 발생하는데요

ToOne 관계이면, 패치조인이 되어 N+1이 발생하면안될것같은데 이 경우는 왜 발생할까요?

그리고 어떻게 해결해야할지도 궁금합니다.

답변기다리곘습니다 감사합니다.

답변 1

0

김영한님의 프로필 이미지
김영한
지식공유자

안녕하세요. 그리즐리님

다음을 참고해주세요.

https://www.inflearn.com/questions/270577

감사합니다.

그리즐리님의 프로필 이미지
그리즐리

작성한 질문수

질문하기