2013-06-20 3 views
1

저는 클라이언트와 사용자간에 많은 관계가 많으며 클라이언트를 활성화해야하는 모든 활성 사용자와 해당 클라이언트를 반환하기 위해 쿼리를 실행하려고합니다. 그러나 그것은 나에게도 모든 비활성 클라이언트를 돌려 준다. 내 쿼리는 다음과 같습니다.JPQL은 다 대다 관계에 합류합니다.

select u from User u inner join u.clientUsers cu join cu.client c where u.active = true and c.active = true 

내 조인 유형이 잘못되었습니다. 누군가 제발 도와 드릴까요?

답변

2

활성 상태이고 활성 클라이언트가있는 모든 사용자를 반환합니다. 그것은 클라이언트를 반환하지 않으므로 user.clientUsers 관계에 액세스하면 연결된 모든 클라이언트를 가져옵니다. 반환 된 엔터티는 데이터베이스에있는 상태로 엔터티의 상태를 반영하기 때문에 쿼리를 기반으로 불완전한 엔터티를 작성하는 것은 사양에서 지원되지 않습니다. 변경 사항을 추적 할 때 문제가 발생할 수 있으며 실제 데이터가 필요할 때 혼동을 일으킬 수 있습니다. 대신 활성 사용자가있는 활성 클라이언트에 대해 쿼리를 수행 한 다음 클라이언트에서 사용자에게 액세스하십시오 (관계가 양방향이라고 가정). "클라이언트에서 c를 선택하십시오. c.clientUsers cu에 c.active = true 및 cu를 결합하십시오. user.active = true " 또는 하나의 쿼리에서 둘 다 원할 경우 : "클라이언트에서 c, u를 선택하십시오. c.clientUsers cu가 cu.user u에 합류합니다. 여기서 c.active = true 및 u.active = true "

두 번째 쿼리는 object []의 목록을 반환하며 각 객체 배열에는 클라이언트와 연관된 활성 사용자가 포함됩니다. 필요한 경우 사용자 및 클라이언트 모음을 매핑하도록 처리 할 수 ​​있습니다.

관련 문제