2014-01-08 2 views
1

두 개의 클래스 A와 B가 있습니다. 클래스 A에는 클래스 B의 오브젝트 콜렉션이 있습니다. 클래스 B에는 필드 X가 있습니다. 클래스 A의 객체 목록을 반환 할 수 있기를 원합니다. 객체 컬렉션 B에는 속성 X의 특정 값을 갖는 객체가 있습니다. 가능합니까?JPA2 기준 - 지정된 값을 가진 다른 요소가있는 콜렉션을 갖는 요소 선택

Root<A> root = criteriaQuery.from(A.class); 
criteriaQuery.select(root); 
criteriaQuery.where(root.get("bCollection").get("x").in("value")) 

그러나 물론이 작동하지 않습니다

지금까지 내가 좋아하는 뭔가를 시도했다. 어떻게 처리할까요? 클래스 B는 다음과 같이 중첩 된 구성 요소로 매핑됩니다.

<set name="bCollection" table="bCollection"> 
      <key column="a_id" /> 
      <composite-element 
       class="example.B"> 
       <many-to-one name="x" column="b_id" not-null="false" 
        cascade="none" foreign-key="b_fk" /> 
      </composite-element> 
</set> 

누군가가 ... 감사드립니다. 물론

답변

1

것이 가능하다 : (당신처럼)

  1. 루트 A를 만듭니다.
  2. 루트 A와 B를 결합하여 Join B을 얻습니다.
  3. 여기서 Join B을 사용하여 where 조건을 추가하십시오.

IN 절의 예는 google 또는 this answer을 확인하십시오.

+0

확인 :)! 그러나 B 유형의 오브젝트 콜렉션이 A에 직접 있지는 않지만 A 클래스의 일부 클래스 C에있는 경우 동일한 작업을 수행하는 방법은 무엇입니까? 이 클래스 C는 구성 요소로 매핑되므로 계층 구조에 아무 것도 추가하지 않습니다. – user2902211