inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화

간단한 주문 조회 V3: 엔티티를 DTO로 변환 - 페치 조인 최적화

Order의 전체조회를 할때 조회타입 생략이 가능한가요?

256

kate

작성한 질문수 23

0

실수로 생략하고 실행했는데 조회는 정상적으로 작동합니다.

타입을 지정해야하는 상황과 지정하지 않아도 되는 상황을 예시로 명확히 설명해주실 수 있을까용?

java spring spring-boot jpa

답변 1

0

y2gcoder

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

제가 kate님의 질문을 잘 이해했는지 모르겠습니다.

제가 이해한 바에 따르면 OrderRepository에서

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" +
            " join fetch o.member m" +
            " join fetch o.delivery d")
        .getResultList();
}

이런 식으로 구현하셨고 그대로 실행해봤을 때 정상적으로 작동하셨다는 것으로 이해했습니다.

그래서 이 결과를 보고

타입을 지정해야하는 상황과 지정하지 않아도 되는 상황을 예시로 명확히 설명해주실 수 있을까용?

위와 같은 의문이 들어 질문을 주셨다고 이해했습니다.

먼저 EntityManager의 createQuery() 메서드는 엔티티 클래스와 같은 반환타입을 지정해주면 반환 타입이 TypeQuery 인터페이스이고, 지정해주지 않으면 Query 인터페이스를 반환합니다. 거기서 .getResultList()를 붙이면 최종 반환타입은 각각 List<Entity> / List<Object>가 되는 것으로 알고 있습니다. 그래서 혹시 밑에 반환 타입을 지정하지 않고 만든 코드에서 캐스팅하라는 IDE의 경고가 뜨지는 않았는지 개인적으로는 궁금합니다.

kate님의 질문으로 돌아가서 TypeQuery는 반환 타입이 명확할 때, Query는 반환 타입이 명확하지 않을 때 사용하기에 적절합니다. 개인적으로는 명확한 것을 좋아해서 TypeQuery를 사용하는 편이고, 그래서 반환 타입을 가급적 넣어주려고 노력합니다. Query 타입으로 반환이 필요할 때는 아마 JPQL을 통해 조회를 하되 엔티티 자체를 조회하기보단 엔티티의 일부 속성 값들(2개 이상)을 조회하는 JPQL을 사용할 때 사용할 것 같습니다.

감사합니다.

강의 관련 외 질문입니다.

0

67

2

SpringBoot4 + Hibernate7 모듈 등록 방법 공유

0

91

1

BeanCreationException

0

90

3

Update 후 UpdateMemberResponse 매핑할 때

0

49

1

트랜잭션을 사용 안 할 때 커넥션은 언제 가져오나요?

0

100

2

페이징 + 검색조건 관련해서 질문드립니다.

0

70

1

Query Dsl Q파일 질문입니다.

0

83

1

루트 쿼리라는것은

0

59

1

메서드를 분리하는 기준

0

63

1

findAllWithMemberDelivery 메서드 질문드립니다.

0

110

3

연관관계 매핑을 안 쓸 경우, 사용해야 하는 전략

0

86

2

fetch join과 영속화와 OSIV의 관계

0

86

2

Distinct 사용 전 결과에 대한 의문

0

114

2

레포지토리 계층에서의 트랜잭션에 대한 의문

0

58

1

영속성 컨텍스트 생명주기의 신기한 부분이 있습니다.

0

78

2

dto 필드 속 엔티티 여부

0

60

1

뷰템플릿 사용 시

0

76

2

Result 클래스 관련 질문

0

56

1

@PostConstruct 프록시 관련 질문드립니다

0

86

1

DTO 대신 Form 사용은 안되나요?

0

137

1

OSIV ON 상태일 때

0

96

1

fetch join VS fetch join 페이징 궁금증

0

182

2

양방향 연관관계 알아보는 법?

0

105

1

16강 17강 간단 정리 이게 맞을까요 ?

0

165

2