Java 如何在何处使用JPA CriteriaBuilder中使用多个值
我有一个MyTable示例,它有3列-id、common\u id、creation\u date,其中common\u id对条目进行分组 现在我想使用CriteriaBuilder从每个组中选择所有最新的条目(即每个常用的\u id获取最新的创建日期) 在SQL中,查询如下所示:Java 如何在何处使用JPA CriteriaBuilder中使用多个值,java,sql,jpa,criteria,criteria-api,Java,Sql,Jpa,Criteria,Criteria Api,我有一个MyTable示例,它有3列-id、common\u id、creation\u date,其中common\u id对条目进行分组 现在我想使用CriteriaBuilder从每个组中选择所有最新的条目(即每个常用的\u id获取最新的创建日期) 在SQL中,查询如下所示: select * from MyTable where (common_id, creation_date) in (select common_id, max(creation_date) from MyTabl
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不是一个表达式(它是一个CompoundSelect),所以我不能在它上面使用.in()
谢谢你的指点 您可以使用JPQL创建它吗?据我所知,这是不可能的 我查看了Spect(4.6.16子查询),它讨论了“simples选择表达式”: 我相信,只有一个回报是可能的,如果你看看那里的例子,你不会发现任何类似的
您需要使用NativeQuery进行查询。很好,谢谢。最后,我在子查询中对ID进行了单独的(本机)查询,并在criteria builder部分使用了谓词。
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')))
simple_select_clause ::= SELECT [DISTINCT] simple_select_expression