java - Hibernate命名查询抛出ORA-00979 : not a GROUP BY expression

标签 java hibernate named-query

我在从基于hibernate的namedquery获取结果时遇到问题。

这里是命名查询。

@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")

值和别名正确。

以下是与namedqueries相关的函数。

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

如何修复它?

最佳答案

如果选择:

SELECT do.book 
FROM DetailOrder do 
GROUP BY do.book.id 
ORDER BY SUM(do.quantity) DESC

是Oracle sql不正确。选择和分组依据表达式必须匹配。

我认为“查询”部分:

@NamedQuery(name = "DetailOrder.bestSelling", 
query = "SELECT do.book FROM DetailOrder do GROUP BY do.book.id "
                + "ORDER BY SUM(do.quantity) DESC")

实际上是一个真正的sql语句,而不是hibernate语句。

关于java - Hibernate命名查询抛出ORA-00979 : not a GROUP BY expression,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56578947/

相关文章:

java - hibernate 从子表中选择查询

java - 如何使用 session 工厂关闭连接

java - JPA 命名查询中的多对一关系

java - 如何从 HttpServletRequest (Tomcat 9.0) 获取查询参数?

java - bin/hive 给出错误问题

java - Spring @Transactional。它到底如何运作?

java - 通过 Hibernate 聚合将实体映射到 pojo

java - @NamedQuery : identification variable 'sysdate' is not defined in the FROM clause

java - Ant 无法构建 :"Compile failed; see the compiler error output for details."

java - PHP 类似于 Java 中的自动加载器