1
사용 QueryDSL 스프링 데이터 JPA와 통합 할 때 나는 이상한 행동을 가로 질러 온 :스프링 데이터 JPA + QueryDSL 쿼리 최적화
내가 프로젝트와 사람 사이에 ManyToOne 관계를 가지고있다. 내가 소유자 ID에 의해 사용자에게 속한 모든 프로젝트를 얻을 경우 (외래 키)이 모든 것이 예상대로 작동합니다
QProject project = QProject.project;
QPerson owner = project.owner;
List<Project> projects = from(project).leftJoin(owner).fetch()
.where(owner.id.eq(id)).list(project);
생성 쿼리
select
project0_.id as id1_1_0_,
person1_.id as id1_0_1_,
project0_.creation_date as creation2_1_0_,
project0_.name as name3_1_0_,
project0_.owner as owner4_1_0_,
person1_.name as name2_0_1_
from
project project0_
left outer join
person person1_
on project0_.owner=person1_.id
where
project0_.owner=?
을하지만, 이제 우리는 모든 프로젝트를 얻을하고 싶은 말은하자 (예를 소유자의 이름을) 외래 키가 아닌 필드에 의해 사람에 속하는 : 이러한 경우
QProject project = QProject.project;
QPerson owner = project.owner;
List<Project> projects = from(project).leftJoin(owner).fetch()
.where(owner.name.eq(name)).list(project);
, 테이블 사람 (통지 person1_ 및 person2_)를 두 번 불필요하게 결합된다 :
select
project0_.id as id1_1_0_,
person1_.id as id1_0_1_,
project0_.creation_date as creation2_1_0_,
project0_.name as name3_1_0_,
project0_.owner as owner4_1_0_,
person1_.name as name2_0_1_
from
project project0_
left outer join
person person1_
on project0_.owner=person1_.id cross
join
person person2_
where
project0_.owner=person2_.id
and person2_.name=?
왜 이런 일이 발생하고 그것을 피할 수 있습니까?
감사 티모의 첫 번째 다시 조인 수 있도록 별칭을 작성해야합니다! 이제 예상대로 작동합니다. – codependent