복붙노트

[SPRING] 스프링 데이터 jpa와 querydsl로 왼쪽 결합

SPRING

스프링 데이터 jpa와 querydsl로 왼쪽 결합

나는 스프링 데이터 jpa와 querydsl을 사용하고 있고 왼쪽에 두 개의 테이블을 조인하는 간단한 좋은 쿼리를 작성하는 방법에 갇혀있다. Project 엔티티와 OneToMany 관계가있는 Task 엔티티가 Project에 정의되어 있다고 가정합니다. 다음과 같이하고 싶습니다.

select * from project p left join task t on p.id = t.project_id where p.id = searchTerm
select * from project p left join task t on p.id = t.project_id where t.taskname = searchTerm

JPQL에서는 다음과 같아야합니다.

select distinct p from Project p left join p.tasks t where t.projectID = searthTerm
select distinct p from Project p left join p.tasks t where t.taskName = searthTerm

나는 JpaRepository와 QueryDslPredicateExecutor를 확장하는 ProjectRepository 인터페이스를 가지고있다. 그건 내가 방법에 대한 액세스를 제공합니다 :

Page<T> findAll(com.mysema.query.types.Predicate predicate, Pageable pageable) 

나는 왼쪽 join이 새로운 JPAQuery (entityManager)를 생성함으로써 쉽게 달성 될 수 있음을 안다. 하지만 스프링 데이터 jpa를 명시 적으로 주입 한 엔티티 관리자가 없습니다. 왼쪽 조인을 사용하여 술어를 작성하는 좋은 방법이 있습니까? 여기있는 누군가가 이것을 경험하고 소원을 빌릴 수 있기를 바랍니다. 고맙습니다.

프레이.

해결법

  1. ==============================

    1.작업에 대한 제약 조건을 표현하려면 다음과 같이하면됩니다.

    작업에 대한 제약 조건을 표현하려면 다음과 같이하면됩니다.

    QProject.project.tasks.any().id.eq(searchTerm)
    

    대신 왼쪽 조인을 통해 특정 작업의 사전로드를 표현하려면 술어를 통해이를 표현할 수 없습니다. Querydsl의 술어는 where, join-on 및 쿼리의 일부분에 대한 부울 식입니다.

  2. from https://stackoverflow.com/questions/23077155/left-join-with-spring-data-jpa-and-querydsl by cc-by-sa and MIT license