如何使用JPA CriteriaBuilder在WHERE中使用多个值

时间:2014-11-17 19:29:56

标签: java sql jpa criteria criteria-api

我有一个包含3列的MyTable示例 - id,common_id,creation_date,其中common_id将条目分组。

现在我想选择使用CriteriaBuilder来自每个组的所有最新条目(即每个common_id获取最新的creation_date)。

在SQL中,查询看起来像这样:

select * from MyTable where (common_id, creation_date) in (select common_id, max(creation_date) from MyTable group by common_id)

现在我尝试通过编写类似(cb是CriteriaBuilder,root是Root)来创建where谓词:

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不是一个Expression(它是一个CompoundSelect),所以我不能在它上面使用.in()。

感谢指点!

1 个答案:

答案 0 :(得分:2)

你能用JPQL创建吗?据我所知,这是不可能的。

我查看了Spect(4.6.16子查询),并谈到了#34; simples select expression":

simple_select_clause ::= SELECT [DISTINCT] simple_select_expression

我相信只有一次回归是可能的,如果你看那里的例子,你就找不到类似的东西。

您需要使用NativeQuery。