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

Recfli님의 프로필 이미지

작성한 질문수

실전! Querydsl

동적 쿼리 - BooleanBuilder 사용

Querydsl 자동 join

해결된 질문

24.02.19 01:35 작성

·

232

·

수정됨

0

안녕하세요? JPA 활용 2편과 Querydsl 편을 수강하고 나서 코드를 작성하다가 알게 된 내용인데 원래 그런 것인지 알고 싶어서 여쭤봅니다.

JPA 활용 2편에서 Order와 member, delivery를 한번에 조회하는 OrderSimpleApiController에서 V4를 Querydsl 버전으로 바꾸었습니다.

OrderSimpleApiController.java

OrderSimpleQueryDto

@Data
public class OrderSimpleQueryDto {
    private Long orderId;
    private String name;
    private LocalDateTime orderDate;
    private OrderStatus orderStatus;
    private Address address;

    @QueryProjection
    public OrderSimpleQueryDto(Long orderId, String name, LocalDateTime orderDate, OrderStatus orderStatus, Address address){
        this.orderId = orderId;
        this.name = name; // LAZY 초기화
        this.orderDate = orderDate;
        this.orderStatus = orderStatus;
        this.address = address; // LAZY 초기화
    }
}

orderSimpleQueryRepository.findOrderDtosQuerydsl

public List<OrderSimpleQueryDto> findOrderDtosQuerydsl(){
    JPAQueryFactory queryFactory = new JPAQueryFactory(em);

    return queryFactory
            .select(new QOrderSimpleQueryDto(
                    order.id.as("orderId"),
                    order.member.name,
                    order.orderDate,
                    order.status,
                    order.delivery.address)
            )
            .from(order)
            .fetch();
}

이렇게 V4버전을 바꿨는데, 딱히 제가 join을 날린 게 없는데 join이 날라갑니다. 오히려 제가 fetchJoin용으로 코드를 작성하려고 from절의 아랫 부분에 다른 코드를 작성하는게 불가능했습니다. join(order.delivery, order).fetchJoin() 같은 코드는 작성이 안되고 join(order.delivery).fetchJoin()은 semantic 오류라는 에러코드가 날라옵니다.

Dto로 작성할 때 여러 테이블을 페치 조인해야하는 상황에서는 Querydsl을 어떻게 사용해야하나요?

 

학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.

1. 강의 내용과 관련된 질문을 남겨주세요.
2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.
(자주 하는 질문 링크: https://bit.ly/3fX6ygx)
3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.
(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)

질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.
=========================================
[질문 템플릿]
1. 강의 내용과 관련된 질문인가요? (예/아니오)
2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)
3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)

[질문 내용]
여기에 질문 내용을 남겨주세요.

답변 1

1

y2gcoder님의 프로필 이미지

2024. 02. 19. 09:26

안녕하세요. 백명규님, 공식 서포터즈 y2gcoder입니다.

fetch join은 엔티티 상태에서 엔티티 그래프를 참조하기 위한 방법입니다! 그래서 DTO의 fetch join은 불가능합니다! 다음 링크(클릭)을 참조해주십쇼!

감사합니다.

Recfli님의 프로필 이미지
Recfli
질문자

2024. 02. 19. 12:25

확인했습니다! 감사합니다!

Recfli님의 프로필 이미지

작성한 질문수

질문하기