2016-09-15 2 views
0

다음 매핑이 있습니다.
1 사용자는 0 개 이상의 역할을 가질 수 있습니다. 사용자의
한꺼번에 가져 오기 많은 관계가 동일한 엔터티를 여러 번 반환합니다.

쿼리
유는 u.roles

사용자 1이 두 가지 역할 RoleA 및 RoleB이있는 경우

가져 오기 가입하세요.
그런 다음 User1이 두 번 반환됩니다.

사용자 1이 반환되어야합니다. RoleA 및 RoleB가 포함 된 역할 목록이있는 경우 한 번
어떻게 해결할 수 있습니까?

또한 Many To Many relationship의 동작을 설명하십시오. 코드 아래

답변

2

4.4.5.3

SELECT d FROM Department d LEFT JOIN FETCH d.employees WHERE d.deptno = 1 

A는 가입 페치 JPA 스펙 같은있다 참조 : 자세한 내용은

criteria.setResultTransformer(CriteriaSpecification.DISTINCT_ROOT_ENTITY); 

이 링크를 확인 관련 의미로 조인을 결합하거나 외부 조인 조인 작업의 오른쪽에있는 에 지정된 관련 객체가 쿼리 에 반환되지 않거나 쿼리에서 참조되지 않습니다. 따라서 예를 들어 부서 1에 5 명의 직원이있는 경우 위 쿼리는 부서 1 엔터티에 대한 5 개의 참조를 반환합니다.

옵션

  1. 당신은 중복 행을 필터링 할 SELECT 절에 DISTINCT를 추가 할 수 있습니다.
  2. 쿼리에 대해 EntityGraph을 정의하고 필드에 roles 필드를 추가하면 가져 오므로 쿼리에서 "FETCH JOIN"을 생략합니다.
  3. roles 필드를 EAGER로 표시하지만 해당 필드의 모든 페치에 적용되므로 바람직하지 않을 수 있습니다.
+0

엔티티 그래프 팁에 대한 감사. 답변 해주세요. http://stackoverflow.com/questions/39507887/behavior-of-distinct-root-entity – Piyush

관련 문제