@Jackson750

Как внести sql count в Map?

Задание: почитать книги за жанром и вывести их.

Никак не могу правильно их посчитать. Сначала пробовал просто посчитать количество но и здесь проблема.

public List<Integer> task4() {

        Session session = this.sessionFactory.getCurrentSession();

        String sql = "SELECT book.genre, COUNT(book.genre) AS counter FROM book book  GROUP BY genre";
        SQLQuery query = session.createSQLQuery(sql);
        query.addEntity(Book.class);
       // List<Integer> task4List = session.createQuery("SELECT book.genre, COUNT(book.genre) AS counter FROM book  GROUP BY genre")
        //        .list();

        List<Integer>  task4List = query.list();

        //Map<Integer,String> task4List  = (Map<counter,genre >).
        return task4List;

    }

Думал использовать Мапу так как она идеально подходит под ето.
Как правильно посчитать книги по жанру по запросу?
Подойдет критерия, hql или чистый sql.
  • Вопрос задан
  • 123 просмотра
Пригласить эксперта
Ответы на вопрос 2
customtema
@customtema
arint.ru
Ключевой вопрос - с какой целью интересуетесь?

Вариантов много, навскидку:
  1. Сделать отдельную таблицу с жанрами, и триггерами обслуживать счетчики в ней (по аналогии, делают функции тегов). Триггеры могут быть и вне СУБД - написать пару функций, которые будут добавлять, инкрементировать и декрементировать
  2. Выбрать все и посчитать руками. Результат можно кешировать
  3. Выбрать по одному жанру и вернуть размер результата
Ответ написан
Комментировать
azerphoenix
@azerphoenix Куратор тега Java
Java Software Engineer
Что-то типа такого? Это на jpql
@Query("SELECT COUNT(b) FROM Book b WHERE b.genre = ?1")
Long booksCount(String genre);
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы