Question

J'utilise el et je continue à obtenir 0 lorsque j'exécute la requête ci-dessous.Je veux obtenir le nombre de candidats (AP) qui sont actuellement actifs.Le demandeur d'entité infantile est de personne et je veux éviter d'interroger tous les éléments de la personne?

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

L'entité enfant 'demandeur'

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

    private String major;

    private String nativeLanguage;

    private String ethnicity;

    private String hispanic;
}

ma tentative de requête:

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

Était-ce utile?

La solution

Pourquoi ne comptez-vous pas simplement les candidats?

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

Eclipselink transformera cela dans SQL et ajoutez la clause WHERE sur le discriminateur pour vous. N'oubliez pas que JPQL travaille avec vos entités et leurs champs / propriétés persistants.Il connaît leur association et leur hiérarchie de héritage.JPQL n'utilise jamais les noms de table et de colonne.

(Note latérale: Pourquoi utiliser "Oui" pour un champ booléen?)

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top