Счетчик гибернации для ключа и значения - PullRequest
0 голосов
/ 18 ноября 2018

У меня есть задача считать книги по жанрам. Пример: жанр1 - 5;

Не знаю, как считать?

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;

}

Впервые я попробовал считать жанр без названия жанра. И у меня есть проблемы с этим. Как правильно считать жанр с жанром или без?

Модель:

@Entity
@Table(name = "book")

public class Book {
@Id
@Column(name = "id")
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int id;


@Column(name = "name")
private String name;

@DateTimeFormat(pattern = "yyyy-MM-dd")
@Column(name = "published")
@Temporal(TemporalType.DATE)
private Date published;

@Column(name = "genre")
private String genre;

@Column(name = "rating")
private int rating;

P.S. Каждый намек с критериями или hql будет хорош.

Ответы [ 4 ]

0 голосов
/ 23 ноября 2018
String genre  = "SELECT book.genre FROM Book book  GROUP BY genre";
    SQLQuery query= session.createSQLQuery(genre);
    List<String>  genreList = query.list();

    String count = "SELECT  COUNT(genre) AS counter FROM book book  GROUP BY genre";
    query= session.createSQLQuery(count);
    List<Integer>  countList = query.list();

   Map<String, Integer> task4List = new HashMap<String, Integer>();
    for (String genre : genreList) {
         task4List.put(genre ,countList.get(genreList.indexOf(genre)));
    }
0 голосов
/ 18 ноября 2018

Этот SQL должен работать:

выбрать количество (отличное (жанр)) из книги

Вы также можете использовать проекции в Hibernate Criterion API.И кол-во, и отличия являются проекциями Hibernate, и Hibernate сгенерирует правильный SQL на основе сопоставления сущностей.

0 голосов
/ 19 ноября 2018
  public Map<List<String>, List<Integer>> task4() {

    Session session = this.sessionFactory.getCurrentSession();

    String genre  = "SELECT book.genre FROM Book book  GROUP BY genre";
    SQLQuery query= session.createSQLQuery(genre);
    List<String>  genreList = query.list();

    String count = "SELECT  COUNT(genre) AS counter FROM book book  GROUP BY genre";
    query= session.createSQLQuery(count);
    List<Integer>  countList = query.list();

    Map<List<String>, List<Integer>> task4List = new Hashtable<List<String>, List<Integer>>();
    task4List.put(genreList,countList);

    return task4List;

}
0 голосов
/ 18 ноября 2018

Попробуйте этот код

public void task4() {
    Session session = this.sessionFactory.getCurrentSession();
    String sql = "SELECT genre, COUNT(1) FROM Book GROUP BY genre";
    Query query=session.createQuery(sql);
    List<Object[]>  task4List = query.list();
    for(Object[] o:task4List) {
        System.out.println("genre = "+o[0]+"   Count = "+o[1]);
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...