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

포닥님의 프로필 이미지

작성한 질문수

실전! Querydsl

조인 - 페치 조인

select()가 아닌 selectOne()을 사용하면 fetchJoin을 사용하지 못하나요?

해결된 질문

21.12.14 18:09 작성

·

560

0

안녕하세요. 강의 잘 듣고 있습니다 :)

 

exists 기능을 구현하고 있는데, fetchJoin을 사용해봤습니다. 그저 데이터의 유무만 판단하면 됐기에 selectOne() 으로 조회를 했는데 실패하네요 ㅠㅠ 하지만 이후 fetchJoin()을 제거하니 잘 동작하는 모습을 확인했습니다.

// 성공하는 코드
@Override
public boolean existsByReviewEntity(ReviewEntity reviewCond) {
    final Integer result = queryFactory
        .selectOne()
        .from(reviewCommentEntity)
        .innerJoin(reviewCommentEntity.reviewEntity, reviewEntity)
        .where(reviewEq(reviewCond))
        .fetchFirst();
    return result != null;
}

// 실패하는 코드
@Override
public boolean existsByReviewEntity(ReviewEntity reviewCond) {
    final Integer result = queryFactory
        .selectOne()
        .from(reviewCommentEntity)
        .innerJoin(reviewCommentEntity.reviewEntity, reviewEntity).fetchJoin()
        .where(reviewEq(reviewCond))
        .fetchFirst();
    return result != null;
}

 

제 생각에는 두 가지 이유가 추측되는데요,

1. selectOne 이랑 fetchJoin의 실행 순서(?)

2. select 1 을 하면 특정 필드를 가져오는 것이 아니기 때문에 fetchJoin이 불가능(?)

 

열심히 구글을 찾아봐도 만족스러운 답을 찾지 못했고, 두루뭉실하게 의문만 남아있는 상태네요.. 

 

도움 주시면 감사하겠습니다 !!

짤막한 힌트도 좋습니다 :)

답변 1

1

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

2021. 12. 14. 20:10

안녕하세요. 포닥님

fetch join은 엔티티를 대상으로 조회할 때만 가능합니다.

감사합니다.

포닥님의 프로필 이미지
포닥
질문자

2021. 12. 15. 09:37

감사합니다 !! 그걸 몰랐네요,..

포닥님의 프로필 이미지

작성한 질문수

질문하기