java - JPA Criteria API - 日历值的算术

标签 java jpa criteria-api

我正在重写一个巨大的搜索查询,最初是在 Hibernate Criteria 中创建的。我尝试仅使用标准 JPA 解决方案。我面临的问题是,我想创建一个像这样的 where 子句:

select ... where (stopTime - startTime) > minimalLength

这对于日历值来说似乎是不可能的,因为我无法使用 Criteria API 对它们进行算术运算。有解决办法吗?

更新1

正如答案中提到的(现已删除),Criteria API 具有 sumdiffprod 方法,但是它们的签名为:

<N extends java.lang.Number> Expression<N>
    method(Expression<? extends N> x, Expression<? extends N> y)
<N extends java.lang.Number> Expression<N>
    method(N x, Expression<? extends N> y)
<N extends java.lang.Number> Expression<N>
    method(Expression<? extends N> x, N y)

因此它们不能用于日历(甚至不能用于日期)。

更新2

我想,我走在正确的道路上。我决定使用 CriteriaBuilder 的 function 方法,并使用它来调用(不幸的是供应商特定的)datediff SQL Server 方法。它看起来像这样:

builder.function("datediff", Integer.class, builder.literal("second"), startTime, stopTime)

几乎有效,唯一的问题是,datediff不能使用String作为第一个参数,它需要一个关键字(即不带引号的“第二”)。有人知道如何将文字传递给函数吗?

最佳答案

好吧,最后我放弃了,用 HQL 而不是 Criteria API 来做。我们只希望我的问题能够在 Criteria API 的下一次迭代中得到解决...

关于java - JPA Criteria API - 日历值的算术,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26280772/

相关文章:

java - 使用 JPA 2 和 Hibernate 的扩展持久性上下文类型

java - 如何使用jpa中的选择查询来检索所有数据?

JPA Criteria 选择组中具有最大值的所有实例

java - 在 Java 中使用流发送 Http Post 消息

java - JPA 惰性列表上的流

java - 如何从 JVM 外部调用对象中的方法?

多对多关系中的 JPA 条件查询

jpa - 如何计算子查询返回的行数?

java - StringTokenizer countTokens 可以为零吗?

java - 用 Gson 解析这个奇怪的嵌套 HashMap