Альтернативный способ для кода с использованием критериев JPA - PullRequest
1 голос
/ 15 января 2020

С отказом от createCriteria () в классе Criteria в Hibernate 5.2.2 многие из его связанных функций больше не могут использоваться. Я нашел альтернативное использование для crit.createAlias ​​(String, String) и добавление ограничения по следующей ссылке Устаревший метод createCriteria в Hibernate 5 Но я не могу найти, как заменить в JPA оценивает следующие функции, доступные в Критериях:

    criteria.setProjection(Projections.projectionList()
                           .add(Projections.distinct(Projections.property("student.id")), "id")
                           .add(Projections.property("student.name"), "name"));
    criteria.addOrder(Order.asc("student.name"));
    if (limit != null)
        criteria.setMaxResults(limit);
    if (offset != null)
        criteria.setFirstResult(offset);
    criteria.setResultTransformer(new AliasToBeanResultTransformer(Student.class));

Пожалуйста, предоставьте мне альтернативный способ написания того же кода с использованием API критериев JPA.

1 Ответ

1 голос
/ 20 января 2020

До сих пор я нашел следующий альтернативный способ:

    CriteriaBuilder builder = sessionFactory.getCriteriaBuilder();
    CriteriaQuery<Student> criteriaQuery = builder.createQuery(Student.class);
    //Perform the required join
criteriaQuery.multiselect(student.get("id").alias("id"),student.get("name").alias("name")).distinct(true);
    criteriaQuery.orderBy(builder.asc(student.get("name")));
    TypedQuery typedQuery = entityManager.createQuery(criteriaQuery);
    if (limit != null)
      typedQuery.setMaxResults(limit);
    if (offset != null)
      typedQuery.setFirstResult(offset);
    List<Student> resultList = typedQuery.getResultList();

Моя проблема была решена с помощью вышеуказанного решения. Критерии JPA не требуют AliasToBeanResultTransformer(). Он трансформируется в нужный боб.

...