我是Criteria API的新手,我正在尝试创建一个对< code>B类型的实体进行计数的查询,其中< code > a . some method(B)= = true 。
我的实体:
@Entity
public class A {
//Polymorphic function
public boolean someMethod(B b) {
// Processes b...
return result;
}
}
@Entity
public class B {
// Some properties.
}
我不知道使用JPA是否可以做到这一点,但我已经勾勒出了这个:
CriteriaQuery<Long> countQuery = criteriaBuilder.createQuery(Long.class);
Root<B> countB = countQuery.from(B.class);
// a is already available.
countQuery.where(criteriaBuilder.isTrue(/*Expression that evaluates a.someMethod(B)*/));
问题是我不知道如何创建与 criteriaBuilder.isTrue()
一起使用的表达式。我的意思是,我甚至不知道我是否应该使用 criteriaBuilder.isTrue()
来解决这个问题。
那么,有人能帮我吗?目前,我正在从数据库获取B
类型的所有实体上运行a.someMethod()
,但我想将结果限制在JPA层本身。
谢谢!
你不能。criteria api只是动态构建一个查询,该查询被翻译成SQL并由数据库执行。数据库不知道也不关心你的Java类和方法。