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

포닥님의 프로필 이미지
포닥

작성한 질문수

실전! Querydsl

조인 - 페치 조인

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

해결된 질문

작성

·

581

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

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

안녕하세요. 포닥님

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

감사합니다.

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

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

포닥님의 프로필 이미지
포닥

작성한 질문수

질문하기