JPA EclipseLink getCount da entidade filha
-
13-12-2019 - |
Pergunta
Estou usando EL e continuo recebendo 0 quando executo a consulta abaixo.Quero obter a contagem de candidatos (AP) que estão ativos no momento.A entidade filha Candidato é Pessoa e quero evitar consultar todos os elementos de Pessoa?
@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;
}
A entidade filha 'Candidato'
@RooJavaBean
@RooToString
@RooEntity
@DiscriminatorValue("AP")
public class Applicant extends Person{
private String major;
private String nativeLanguage;
private String ethnicity;
private String hispanic;
}
Minha tentativa de consulta:
/**
*
* @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;
}
Solução
Por que você simplesmente não conta os candidatos?
select count(distinct a) from Applicant a where a.active = true
O EclipseLink transformará isso em SQL e adicionará a cláusula where no discriminador para você.Lembre-se de que JPQL funciona com suas entidades e seus campos/propriedades persistentes.Ele conhece sua associação e sua hierarquia de herança.JPQL nunca usa nomes de tabelas e colunas.
(Nota:por que usar "Sim" para um campo booleano?)
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow