2012-05-22 7 views
0

Я использую EL, и я продолжаю получать 0, когда я запускаю запрос ниже. Я хочу получить счетчик заявлений (AP), которые в настоящее время активны. Заявитель дочернего объекта принадлежит человеку, и я хочу избежать запроса всех элементов 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(). –

Смежные вопросы