提问者:小点点

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


我是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层本身。

谢谢!


共1个答案

匿名用户

你不能。criteria api只是动态构建一个查询,该查询被翻译成SQL并由数据库执行。数据库不知道也不关心你的Java类和方法。

相关问题