Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/84.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在何处使用JPA CriteriaBuilder中使用多个值_Java_Sql_Jpa_Criteria_Criteria Api - Fatal编程技术网

Java 如何在何处使用JPA CriteriaBuilder中使用多个值

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

我有一个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 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