2013-08-14 4 views
3

는 "SUBSET"기능이 있습니다합니까 JPQL은 다음과 나는 간단한 데이터 모델이

  • 엔티티 1 : EmployeeAsset. 여기에는 Employee 객체에 대한 참조가 있습니다.
  • 엔티티 2 : EmployeeJobPosition. 여기에는 직원에 대한 참조도 있습니다. 그것은 또한 OrganisationUnitEntry (이것은 또 다른 엔티티 클래스 임) 객체의 컬렉션을 포함하는 JobPosition (이것은 또 다른 엔티티 클래스입니다) 객체에 대한 참조를 가지고 있습니다.

매개 변수로 사용자가 선택한 OrganisationUnitEntry 개체가 있습니다 (이 ouEntries를 호출합시다). ouEntries의 상위 집합 인 OrganisationUnitEntry 컬렉션이있는 JobPosition과 관련된 모든 EmployeeAsset 객체를 반환하는 쿼리가 필요합니다 (예 : ouEntries는 jobPosition.organisationUnitEntries의 하위 집합 임).

그래서 쿼리가 같은 동적으로 구축 할 수있다 :
SELECT ea 
FROM EmployeeAsset ea, EmployeeJobPosition ejp 
WHERE ea.employee = ejp.employee 
AND :orgUnitEntry1 MEMBER OF ejp.jobPosition.organisationUnitEntries 
... 
AND :orgUnitEntryN MEMBER OF ejp.jobPosition.organisationUnitEntries 

(orgUnitEntry1 - N 그냥 ouEntries의 요소이다).

그러나 서브셋 유형 함수는 훨씬 더 깔끔하지 않을 수 있으며, 보통 이것을 선호하는 정적/명명 된 쿼리에 넣을 수 있습니다. 예 :

... 
AND :ouEntries SUBSET OF ejp.jobPosition.organisationUnitEntries 

그런 검색어를 가장 잘 작성하는 방법에 대한 아이디어가 있으십니까?

+1

JPA 사양은 무엇이라고 말합니까? –

+0

SUBSET 함수에 대해 아무 것도 찾을 수 없었습니다. 그 이유는 다음과 같습니다. :) 단일 함수가 아닐 수도 있습니다. 대신 동적 쿼리를 생성하기위한 대체/더 좋은 방법을 찾고 있습니다. 정적 인 방법으로 예를 들어 – brent777

답변

0

IN을 사용할 수 있습니까?

SELECT ea 
FROM EmployeeAsset ea, EmployeeJobPosition ejp join ejp.jobPosition.organisationUnitEntries o 
WHERE ea.employee = ejp.employee 
AND o IN :ouEntries 

JPA 공급자에 따라 개체 대신 IN과 ID를 비교해야 할 수 있습니다. EclipseLink에서는 개체를 비교할 수 있어야합니다 (> = 2.4).

+0

제임스 제안에 감사드립니다. 나는 이것을 시도해 볼 수있다. ouEntries가 ejp.jobPosition.organisationUnitEntry의 하위 집합인지 확인해야하므로 "AND : ouEntries IN o"로 변경해야합니다. 참고 자료 : 나는 Hibernate의 최신 버전을 사용하므로 어떻게 처리 하는지를 알아야 할 것이다. 다시 한번 감사드립니다. – brent777

관련 문제