我有一个包含 3 列的示例 MyTable - id、common_id、creation_date,其中 common_id 对条目进行分组。
现在我想使用 CriteriaBuilder 从每个组中选择所有最新条目(即为每个 common_id 获取最新的创建日期)。
在 SQL 中,查询如下所示:
select * from MyTable where (common_id, creation_date) in (select common_id, max(creation_date) from MyTable group by common_id)
现在我尝试通过编写类似的内容来创建 where 谓词(cb 是 CriteriaBuilder,root 是 Root):
cb.array(root.get('common_id'), cb.max(root.get('creation_date')))
.in(
query.subquery(MyTable.class)
.select(cb.array(root.get('common_id'), cb.max(root.get('creation_date'))))
.groupBy(root.get('common_id')))
但不幸的是 cb.array 不是一个表达式(它是一个CompoundSelect),所以我不能在它上面使用 .in() 。
谢谢指点!
最佳答案
您可以使用 JPQL 创建它吗?据我所知,这是不可能的。
我查看了 Spect(4.6.16 子查询),它讨论了“简单的选择表达式”:
simple_select_clause ::= SELECT [DISTINCT] simple_select_expression
我相信只有一种返回是可能的,如果您查看那里的示例,您将找不到类似的东西。
您将需要使用 NativeQuery。
关于java - 如何使用 JPA CriteriaBuilder 在 WHERE 中使用多个值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26980437/