Hibernate namedquery выдает ORA-00979: не выражение GROUP BY - PullRequest
1 голос
/ 13 июня 2019

У меня проблема с получением результата от именованного запроса на основе hibernate.

Вот здесь именованные запросы.

@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

Как я могу исправитьэто?

Ответы [ 2 ]

0 голосов
/ 13 июня 2019

Мой ответ

SELECT do.book_ıd,SUM(do.quantity) FROM detaılorder do LEFT JOIN book b on do.book_ıd = b.book_ıd
GROUP BY do.book_ıd
ORDER BY SUM(do.quantity) DESC;

SELECT r.book_ıd,COUNT(r.book_ıd) AS ReviewCount,AVG(r.rating) as AvgRating FROM revıew r LEFT JOIN book b on r.book_ıd = b.book_ıd
GROUP BY r.book_ıd HAVING AVG(r.rating) >= 4.0
ORDER BY ReviewCount DESC, AvgRating DESC;
0 голосов
/ 13 июня 2019

Если это выбрать:

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, а не спящий режим.

...