raycon / til

Today I Learned
MIT License
16 stars 3 forks source link

QueryDSL OneToMany 관계에서 Cartesian Product 문제 없이 Child 조건으로 검색하는 방법 #106

Open raycon opened 2 years ago

raycon commented 2 years ago

Team 에 속한 User 의 이름으로 팀을 검색하고 싶을 경우

QTeam.team.members.any().name.eq("alex") 를 사용한다.

where 조건이 다음과 같이 실행된다.

where 
exists (
    select
        1 
    from
        user u
    where
        t.id=u.team_id
        and u.name='alex'
)
raycon commented 2 years ago

OneToMany 관계에 있는 테이블을 queryFactory 를 사용해서 join 하면 안되고, 위 Predicatewhere 조건으로 사용해야한다.