inflearn logo
강의

Course

Instructor

Practice! Querydsl

Dynamic Queries and Performance Optimization - Using WHERE Clause Parameters

상속 구조에서 querydsl 조회하기

1165

kkh

14 asked

0

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

1. 강의 내용과 관련된 질문을 남겨주세요.
2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.
(자주 하는 질문 링크: https://docs.google.com/document/d/1j0jcJ9EoXMGzwAA2H0b9TOvRtpwlxI5Dtn3sRtuXQas/edit#heading=h.w2tomwsznga7)
3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.
(질문 잘하기 메뉴얼 링크: https://docs.google.com/document/d/1xCQKit-1V6l6ObeCe49St33RHPzLF_P_c3o7aSDTKs0/edit#heading=h.7dhnp46ven0v)

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

[질문 내용]
여기에 질문 내용을 남겨주세요.
 
이전 강의 에서 Entity에서 Iteam을 Book , Movie, Ablum으로 상속하는 구조를 가지고 있습니다. 이럴 경우 querydsl로 조회 할 때 dtype을 where 절에서 사용할 수 있는지 궁금합니다. 만약 사용할 수 없다면 실무에 적용할 수 있는 다른 좋은 방법이 있는지 궁금합니다.
 

java JPA

Answer 2

1

yh

안녕하세요. kkh님

JPQL 쿼리를 작성할 때 from에 자식 타입을 넣으시면 원하시는 결과를 얻을 수 있습니다.

(이게 정석 방법입니다.)

만약 dtype이 꼭 필요하다면 dtype을 필드를 만들고 읽기 전용(insert=false, update=false)으로 JPA @Column 컬럼 매핑하시면 됩니다.

감사합니다.

0

kkh

답변 감사합니다.

위와 같이 상속을 사용해서 Entity 를 구성하는 경우 실무에서는 querydsl로 Item, Book, Ablum, Movie Entity의 비즈니스 로직을 작성할 때는 아래 와 같은 방법으로 repository와 service를 구현할 수 있다고 생각합니다.

실무에서는 어떤 방식을 주로 사용하는지 궁금합니다. 만약 3가지 모두 틀린 경우에는 어떤 방식이 가장 좋은 방식인지 궁금합니다.

경험 많으신 김영한 님께서 번호만 선택 해주신다면 많은 도움이 될거 같습니다 ㅜㅜ.

1. Item, Book, Ablum, Movie각각 repository를 따로 두고 service도 따로 둔다.

public interface ItemRepository extends JpaRepository<Item, Long>, ItemQuerydslRepository{ 
    // .. 
}

public interface MovieRepository extends JpaRepository<Movie, Long>, MovieQuerydslRepository { 
    // .. 
}

// ...

public class ItemService { 
    // .. 
}

public class MovieService { 
    // .. 
}
//...

2. Item, Book, Ablum, Movie 를 모두 다른 repository로 두고 service에서 map/factory객체에 repository bean을 저장해서 사용한다.

public interface Repository {}

public interface ItemRepository extends JpaRepository<Item, Long>, ItemQuerydslRepository, Repository { 
    // .. 
}

public interface MovieRepository extends JpaRepository<Movie, Long>, MovieQuerydslRepository, Repository  { 
    // .. 
}

// ...

@RequireArgumentrs
public class ItemService { 
       private final RepositoryFactory repositoryFactory;
}

@RequireArgumentrs
public class RepositoryFactory {
     private final ItemRepository itemRepository;
     private final MovieRepository  movieRepository ;
// ....

    public Repository getObj(ItemType type) {
          if (type == MOVIE) return movieRepository ;
          // ,.,.. codes
          return itemRepository;
    }
}

3. Item, Book, Ablum, Movie의 querydsl interface와 Impl class를 따로 두고 하나의 repository interface에 모두 상속하는 구조를 가진다. -> service도 1개만 사용

public interface ItemRepository extends JpaRepository<Item, Long>, ItemQuerydslRepository, MovieQuerydslRepository{ 
    // .. 
}

@RequireArgumentrs
public class ItemService { 
       private final RepositoryFactory repositoryFactory;
}

좋은 코드를 작성하기 위해서 위 3가지 중 어떤걸 선택하는게 가장 적절한지 궁금합니다....

0

yh

이 경우 상황에 따라서 1,3번을 선택해야 합니다.

애플리케이션이 단순하고 대부분 공통 로직이면 3번을 선택하고, 애플리케이션이 복잡하고, 비즈니스 로직이 상황별로 다르다면 1번을 선택하면 됩니다.

2번은 크게 장점이 없을 듯 합니다.

도움이 되셨길 바래요^^

SpringBoot 4.X에서의 Querydsl 설정

0

122

2

querydsl 오픈소스에 대한 질문

1

88

1

예제에서의 카운트 쿼리에서 join문과 where문은 필요없지 않나요?

0

118

1

Querydsl 6.X버전에 대해서 어떻게 생각하시나요?

0

336

2

여러 테이블 조인하여 통계치를 구하고자 할 때 어떤 방법이 더 효율적일까요

1

80

1

fetchResults()는 더이상 권장되지 않는다는데 맞나요?

0

168

1

querydsl sum() 메서드 없어요.

0

165

2

build 디렉터리 생성

0

147

2

자바 ORM 표준 JPA 프로그래밍 - 기본편 듣고 바로 학습해도 괜찮을까요?

0

119

2

현재 Querydsl에서 from절 서브쿼리를 지원하나요?

0

98

1

오타 제보 드립니다.

0

76

2

벌크 연산과 flush, clear

0

81

1

Run As Intellij 로 변경시 Q타입 import 불가

0

93

1

QHello import하기 문제 발생

0

152

2

등록된 함수 보는법(H2Dialect) 질문

0

73

2

5.0부터 Querydsl은 향후 fetchCount() , fetchResult() 를 지원하지 않기로 결정했다고 하는데 이에 맞는 강의

1

203

2

[환경설정 PDF 부트 3.0이후 설명 질문] build.gradle에 compileQuerydsl을 정의하지 않은 상태에서 Gradle->Tasks->other->compileQuerydsl을 클릭하라고 하는 이유가 무엇인가요??

1

207

1

querydsl 설정 문제

0

225

2

quey dsl 설정부분

0

161

2

count 쿼리 관련 질문입니다!

0

77

1

stringtemplate를 이용하여 where절 검색 방법 질문 드립니다.

0

92

1

답변부탁드리겠습니다.

0

92

2

(OrderSpecifier)관련 내용 어디있을가요

0

67

1

중급문법 벌크연산에서

0

84

2