Pregunta

Estoy usando El y yo seguimos obteniendo 0 cuando ejecuto la consulta a continuación.Quiero obtener la cuenta de los solicitantes (AP) que actualmente están activos.¿El solicitante de la entidad infantil es de persona y quiero evitar consultar todos los elementos de la persona?

@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;
}

La entidad infantil 'solicitante'

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

    private String major;

    private String nativeLanguage;

    private String ethnicity;

    private String hispanic;
}

El intento 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;
    }

¿Fue útil?

Solución

¿Por qué simplemente no cuentas los solicitantes?

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

EclipsElink transformará esto en SQL y agregará la cláusula WHERE en el discriminador para usted. Recuerde que JPQL trabaja con sus entidades y sus campos / propiedades persistentes.Sabe sobre su asociación y su jerarquía de herencia.JPQL nunca usa nombres de tabla y columna.

(Nota lateral: ¿Por qué usar "sí" para un campo booleano?)

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top