JPA CriteriaQuery 有子句

Posted

技术标签:

【中文标题】JPA CriteriaQuery 有子句【英文标题】:JPA CriteriaQuery having clause 【发布时间】:2019-06-21 21:26:40 【问题描述】:

所以我正在开发一个 web 应用程序,我需要执行一个查询来检索我收到一条消息的最新项目。应用程序使用 JAX-RS 和 Hibernate 来完成它的任务。表格如下所示:

我感兴趣的是独特的项目,但那些在更新的列中具有最大值的项目。

所以通常我会创建一个子查询,在其中我将按更新的列对所有内容进行排序,并在 out 查询中调用 distinct 方法检索有限数量的行。但显然 sql 不希望这样,并且 criteriaQuery 不允许在子查询中使用 orderby。

知道如何使以下查询 sql 舒适(删除嵌套查询)。它可能在语法上不正确,但应该足以了解我想要它做什么:

select distinct project from (select project,updated from Message order by updated) limit 5

我进行了很多搜索,虽然 group by 与 having 子句结合可以解决我的问题,但也无法使其正常工作。

【问题讨论】:

我通过使用此处发布的查询找到了解决方案:***.com/questions/53226053/…Realizable using subqueries in criteriaqueries。编辑:有人可以做到,所以这个问题是指上面的链接吗?基本上是重复的 【参考方案1】:

要获取您可以使用的 5 条最新消息:

List resultList = em.createQuery("select distinct m.project from Message m order by m.updated desc")
                    .setMaxResults(5)
                    .getResultList();

【讨论】:

不幸的是,这不起作用。我收到一个错误(它是德语,但我搜索了正确的英文版本)“在这种情况下,按表达式排序必须在结果列表中”

以上是关于JPA CriteriaQuery 有子句的主要内容,如果未能解决你的问题,请参考以下文章

如何将 JPA 调整为 Criteriaquery

向 JPA CriteriaQuery 添加连接

JPA 2 CriteriaQuery,使用限制

JPA 解析

复杂的多对多 JPA CriteriaQuery

JPA CriteriaQuery - 不区分重音