2012-05-22 5 views
0

EL을 사용하고 있으며 아래 쿼리를 실행할 때 0이 계속됩니다. 현재 활동중인 지원자 (AP)의 수를 얻고 싶습니다. 하위 엔티티 신청자는 Person이고 Person의 모든 요소를 ​​쿼리하지 않으려합니다.JPA EclipseLink getCount 하위 엔티티

@RooJavaBean 
@RooToString 
@RooEntity(identifierColumn = "personID", inheritanceType = "SINGLE_TABLE") 
@DiscriminatorColumn(name = "TYPE", discriminatorType = DiscriminatorType.STRING, length = 20) 
@DiscriminatorValue("P") 
public class Person { 

    @NotNull 
    @Size(min = 1, max = 50) 
    private String FirstName; 

    @NotNull 
    @Size(min = 1, max = 50) 
    private String LastName; 
} 

아이 엔티티 '신청자'

@RooJavaBean 
@RooToString 
@RooEntity 
@DiscriminatorValue("AP") 
public class Applicant extends Person{ 

    private String major; 

    private String nativeLanguage; 

    private String ethnicity; 

    private String hispanic; 
} 

내 쿼리 시도 :

/** 
    * 
    * @return 
    */ 
    public int getCountActiveApplicants(){ 

     EntityManager entityManager = factory.createEntityManager(); 
     int value = entityManager.createQuery("select count(distinct o) from Person o where o.TYPE = \"AP\" AND o.active = \"Yes\" ").getFirstResult(); 

     System.out.println("wowzer " + value + "\n"); 
     return value; 
    } 

답변

0

왜 당신은 단순히 지원자에 포함되지 않습니다를?

select count(distinct a) from Applicant a where a.active = true 

는 EclipseLink는 SQL이 변환하고 당신을위한 판별에 WHERE 절을 추가합니다. JPQL은 엔티티 및 영구 필드/특성과 함께 작동합니다. 그것은 그들의 연관과 상속 계층에 대해 알고 있습니다. JPQL은 결코 테이블과 컬럼 이름을 사용하지 않는다.

(사이드 노트 : 왜 부울 필드에 대해 "예"를 사용할 수 있습니까?)

+0

그것을 내가 '예'로 설정하고 싶었 또는 '아니오'하지만 아마 좋은 일 때 실제로되지 부울 필드 전 true 또는 false를 사용할 수 있습니다. 나는 지금이 쿼리를 시도 할 것이다. 감사 엔 – Warz

+0

이 엔티티 관리자에서 카운트를 얻으려면 getFirstResult()를 사용해야합니까? – Warz

+0

아니요. getSingleResult()를 사용해야합니다. http://docs.oracle.com/javaee/6/api/javax/persistence/Query.html#getSingleResult%28%29. getFirstResult()는 setFirstResult()에 의해 설정된 내용을 반환합니다. –

관련 문제