Domanda

Sto usando EL e continuo a ricevere 0 quando eseguo la query qui sotto.Voglio ottenere il conteggio dei candidati (AP) che sono attualmente attivi.Il richiedente dell'entità figlio è di persona e voglio evitare di interrogare tutti gli elementi della 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;
}
.

L'entità figlio 'candidato'

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

    private String major;

    private String nativeLanguage;

    private String ethnicity;

    private String hispanic;
}
.

Il mio tentativo di query:

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

È stato utile?

Soluzione

Perché non conti semplicemente i candidati?

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

Eclipselink trasformerà questo in SQL e aggiungerà la clausola WHERE su Discriminator per te. Ricorda che JPQL funziona con le tue entità e i loro campi / proprietà persistenti.Conosce la loro associazione e la loro gerarchia di eredità.JPQL non utilizza mai nomi di tabella e colonna.

(Nota laterale: Perché usare "Sì" per un campo booleano?)

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top