Этот код устарел, начиная с Hibernate 5.2:
return (Long) sessionFactory.getCurrentSession().createCriteria(mainType)
.setProjection(Projections.rowCount())
.uniqueResult();
Какой правильный / идиоматический способ убрать амортизацию?
В примечании в исходном коде Hibernate API просто сказано:
@ устарело (с версии 5.2) для сессии, используйте критерии JPA
Я понимаю, что существует нечто, называемое JPA Criteria Builder . Это, к сожалению, неправильно названо, поскольку оно не создает JPA Критерии . Однако он может вернуть JPA Criteria Query :
CriteriaQuery<T> criteriaQuery = sessionFactory.getCriteriaBuilder().createQuery(mainType);
Это, однако, тупик, так как метод setProjection()
отсутствует.
Обратите внимание, что мой вопрос специально ограничен Criteria Query в Hibernate 5.2+. Существует более широкая, более старая версия этого вопроса ( Как считать строки, используя более старые версии Hibernate (~ 2009)? )