2012-05-22 51 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

它實際上不是一個布爾字段我想將它設置爲「是」或「否」,但它可能不是一個很好的事情時,我可以使用真或假。我會立即嘗試這個查詢。謝謝 – Warz

+0

得到這個實體經理的計數,我應該使用getFirstResult()? – Warz

+0

不可以。您應該使用getSingleResult():http://docs.oracle.com/javaee/6/api/javax/persistence/Query.html#getSingleResult%28%29。 getFirstResult()返回setFirstResult()設置的內容。 –

相關問題