JPA Eclipselink BetCount儿童实体
-
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