【问题标题】:Order by COUNT in JPQL在 JPQL 中按 COUNT 排序
【发布时间】:2015-05-13 19:59:23
【问题描述】:

我有 News 实体与 Comments 一对多关系。 我的目标是根据 cmets 的数量对News 进行排序。 以下查询有效,但它显然只返回 ID,而不是所有 News' 字段:

SELECT news.id 
    FROM News news JOIN news.comments comments
    GROUP BY news 
    ORDER BY COUNT(comments) DESC

如果我将news.id 替换为news,则会出现错误:

SqlExceptionHelper:146 - ORA-01034: ORACLE not available

如何在单个查询中获取整个排序的 News 实体,而不仅仅是 ID?

(数据库:Oracle XE,持久性提供程序:Hibernate)

【问题讨论】:

  • 尝试使用这个:SELECT news FROM News news order by size(news.cmets)
  • 其实可以,但是太慢了。

标签: hibernate jpa count group-by jpql


【解决方案1】:

作为@thanhnguyen said

如果你在 GROUP BY 中传递一个实体,Hibernate 会自动将其 id 添加到底层数据库的转换后的 SQL 中。此外,GROUP BY 中的值必须存在于 SELECT 子句中。因此,您可以选择其 id,而不是选择整个对象,然后从这些 id 中再次检索该对象。

这可能表明您想要做的事情是不可能的。

【讨论】:

  • 您给了我一个想法:我将所有新闻文件添加到 GROUP BY,并且知道它有效。
猜你喜欢
  • 1970-01-01
  • 2013-01-20
  • 2011-10-23
  • 1970-01-01
  • 1970-01-01
  • 2013-04-17
  • 2011-01-18
  • 2022-09-28
相关资源
最近更新 更多