2012-11-20 5 views
5

저는 스프링 데이터 JPA를 처음 접했고, QueryDSL과 함께 사용하는 방법을 잘 이해하고 있습니다. QueryDSL이 없으면 @Query 주석을 사용하여 SpringData 인터페이스에 모든 쿼리를 간단하게 작성할 수 있습니다.스프링 데이터 JPA와 QueryDSL

내가보기에 QueryDSL을 사용하여 동일한 경험을 가지려면 내 자신의 사용자 지정 저장소 구현을 만들고 내 repo 인터페이스를 사용자 지정 구현 인터페이스를 확장하거나 모든 QueryDSL 쿼리를 서비스 계층에 배치해야합니다. 내 레포를 감싸고있어.

첫 번째 경우에는 실제 repo 객체에 액세스 할 수 없기 때문에 내 맞춤 repo에서 SD 자동 생성 된 메소드 (예 : findAll (QueryDSL 조건 자))를 사용할 수 없습니다. 두 번째 경우 나는 repo 계층 대신에 서비스 계층에 쿼리 로직을 넣을 것입니다.

어느 솔루션도 특히 나에게 매력적이지 않습니다. 더 적절한 제 3의 방법이 있습니까? 아니면 QueryDSL과 스프링 데이터를 올바르게 사용하는 방법을 잘못 이해하고 있습니까?

감사합니다. 에릭

답변

10

는 아마도 가장 편리한 방법은 저장소 인터페이스는 단순히 단순히 파이프 Querydsl이 Predicate 저장소에 객체와 그들에게 독립형 또는 PageableSort 등을 함께 실행할 수있는 기능을 추가 QueryDslPredicateExecutor을 확장 할 수 있도록하는 것입니다.

당신이 정말로 저장소 층으로 술어의 조합 숨기려 (절대적으로 괜찮 실제로 다른 용도로 사용)을 설명 here 같은 별도의 저장소 구현 클래스를 생성하고 기본 클래스로 QueryDslRepositorySupport를 사용하는 경우

. 구현 된 파인더 메서드에서 기본 클래스의 from(…), update(…)delete(…) 메서드를 사용하여 Querydsl 메타 모델을 사용하여 쿼리를 쉽게 작성하고 실행할 수 있습니다.

+0

문제는'술어의 조합을 저장소에 숨김 '이 아니고 제게'그룹 by'과 ...를 내 쿼리에 추가하고 술어 만 실행하는 것처럼 보이지 않습니다. – azerafati

+0

불행히도 ,'QueryDslPredicateExecutor'는'groupBy' 등을 사용할 수 없습니다. 오직'where' 부분 만 사용할 수 있습니다. 그것은 종종 충분하지 않습니다. 하지만'QueryDslRepositorySupport'를 기본 클래스로 사용하는 커스텀 리파지토리는 정말 좋습니다! – djxak

+0

@azerafati, https://github.com/infobip/infobip-spring-data-jpa-querydsl에서 살펴보십시오. 원하는 내용 일 수도 있습니다. – lpandzic