【发布时间】:2019-06-13 10:56:58
【问题描述】:
我有一个关于从基于休眠的命名查询中获取结果的问题。
这里是命名查询。
@NamedQuery(name = "DetailOrder.bestSelling",
query = "SELECT do.book FROM DetailOrder do GROUP BY do.book.id "
+ "ORDER BY SUM(do.quantity) DESC")
@NamedQuery(name = "Review.mostFavoredBooks",
query = "SELECT r.bookReview, COUNT(r.bookReview.id) AS ReviewCount, AVG(r.rating) as AvgRating FROM Review r "
+ "GROUP BY r.bookReview.id HAVING AVG(r.rating) >= 4.0 "
+ "ORDER BY ReviewCount DESC, AvgRating DESC")
值和别名正确。
这里是命名查询相关的函数。
public List<Book> listMostFavoredBooks() {
List<Book> mostFavoredBooks = new ArrayList<>();
List<Object[]> result = super.findByNameQueryObjects("Review.mostFavoredBooks", 0, 4);
System.out.println("listMostFavoredBooks | result size :" + result.size());
if (!result.isEmpty()) {
for (Object[] elements : result) {
Book book = (Book) elements[0];
mostFavoredBooks.add(book);
}
}
return mostFavoredBooks;
}
public List<Book> listBestSellingBooks() {
return super.findByNameQuery("DetailOrder.bestSelling", 0, 4);
}
当我从上面定义的命名查询中得到结果时,所有这些都存在相同的问题。
Caused by: java.sql.SQLSyntaxErrorException: ORA-00979: not a GROUP BY expression
我该如何解决?
【问题讨论】:
-
@XtremeBaumer 如何更改查询?不介意的话可以写吗?
-
您可以编写两个独立的查询,一个用于计数,另一个用于平均。您应该阅读上面链接中的答案。 “您必须将 SELECT 的所有列放在 GROUP BY 中,或者在它们上使用函数将结果压缩为 单个 值(如 MIN、MAX 或 SUM)。”
-
@RDK 我编辑帖子。
-
哪个查询有误?关于第二个是什么的一些解释?
标签: java hibernate named-query