JPA EclipseLink getcountの子エンティティ
-
13-12-2019 - |
質問
私はELを使っています、そして私は以下のクエリを実行すると0を取得し続けます。現在アクティブな応募者(AP)の数を取得したいです。子エンティティ申請者は人のものであり、私は人のすべての要素を照会しないようにしたいですか?
@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;
}
. 解決
申請者を数えるだけなのはなぜですか?
select count(distinct a) from Applicant a where a.active = true
.
EclipseLinkはこれをSQLで変換し、識別子のWHERE句を追加します。 JPQLはあなたのエンティティとその永続的なフィールド/プロパティと連携することを忘れないでください。彼らの協会とその継承階層について知っています。JPQLはテーブルと列名を使用しない。
(サイドメモ:ブールフィールドに "はい"を使うのはなぜですか?)
所属していません StackOverflow