我是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类和方法。
基本上,我有一个规范,以便过滤一个查询。在它的内部,需要添加一个新的谓词。 想象一个带有jsonb列(bar)的表(Z)。该列具有以下结构: 通过这样做: 有什么建议吗?
我使用JPA2.1、Spring数据和CriteriaBuilder、谓词对我的JPA实体进行查询。我有一个父实体InvoiceSummary,它与名为ShipmentStop的子实体有@OneToMany关系。我想在子实体ShipmentStop上设置条件,但不确定如何进行。我还希望能够同时在父表和子表上设置条件。有没有一种方法可以使用谓词来实现这一点?例如,我想按子实体的departureDa
当我输入注册号时,当它以后一个B开头时,它应该返回值true,反之亦然,但在这个编码中,当我输入bhu132时,它将值变为false。这里怎么了..请帮帮我
我想使用流从类型B创建类型a的集合。 假设我有两节课 为了从员工集合中创建人员集合,我编写了以下代码 目前,这段代码可以正常工作。但我想知道,是否有更好的方法可以不使用forEach从员工创建人员集合。
词边界 \b 是一种检查,就像 ^ 和 $ 一样。 当正则表达式引擎(实现搜索正则表达式的程序模块)遇到 \b 时,它会检查字符串中的位置是否是词边界。 有三种不同的位置可作为词边界: 在字符串开头,如果第一个字符是单词字符 \w。 在字符串中的两个字符之间,其中一个是单词字符 \w,另一个不是。 在字符串末尾,如果最后一个字符是单词字符 \w。 例如,可以在 Hello, Java! 中找到匹配
我在应用程序中使用Querydsl来大大改进查询数据库的代码。但是,我有一个来自外部服务的JPA谓词(javax.persistence.criteria.Predicate)。我想混合使用Querydsl和外部谓词创建的查询。例如: 另一个解决方案是将Querydsl谓词转换为JPA谓词: 有可能吗?如果是,我如何做到这一点?如果没有,是否有其他混合谓词的解决方案(比如将两者转换为SQL字符串并