如何创建JPA谓词来选择a.someMethod(B)==true的类型为B的实体?

如何创建JPA谓词来选择a.someMethod(B)==true的类型为B的实体?,jpa,criteria-api,Jpa,Criteria Api,我是CriteriaAPI的新手,我正在尝试创建一个对类型B的实体进行计数的查询,其中a.someMethodB==true 我的实体: 我不知道使用JPA是否有可能做到这一点,但我已经概述了这一点: CriteriaQuery<Long> countQuery = criteriaBuilder.createQuery(Long.class); Root<B> countB = countQuery.from(B.class); // a is already avai

我是CriteriaAPI的新手,我正在尝试创建一个对类型B的实体进行计数的查询,其中a.someMethodB==true

我的实体:

我不知道使用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来解决这个问题

有人能帮我吗?目前,我正在从DB中获取B类型的所有实体后,对它们运行a.someMethod,但我想限制JPA层本身的结果


谢谢

你不能。CriteriaAPI只是动态构建一个查询,该查询被转换为SQL并由数据库执行。数据库不知道也不关心您的Java类和方法。

谢谢@JB Nizet,这很有道理。这正是我所期待的,但我必须在JEE文档之外的其他地方检查它。
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)*/));