0

EL を使用していますが、以下のクエリを実行すると 0 が返されます。現在アクティブな応募者 (AP) の数を取得したいと考えています。子エンティティの Applicant は Person であり、Person のすべての要素のクエリを回避したいですか?

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

1 に答える 1

0

単純に応募者数を数えてみませんか?

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

TopLinkはこれをSQLで変換し、識別子にwhere句を追加します。JPQL は、エンティティとその永続フィールド/プロパティで機能することに注意してください。それらの関連付けと継承階層について知っています。JPQL は、テーブル名と列名を使用しません。

(補足: ブール値フィールドに「はい」を使用するのはなぜですか?)

于 2012-05-22T21:02:56.120 に答える