2016-07-19 4 views
16

Как мы уже знаем, критериальный запрос устарел в Hibernate 5. Это была такая полезная функция в предыдущих версиях Hibernate. И он по-прежнему работает лучше, чем HQL.Почему запрос критериев не рекомендуется в Hibernate 5?

В чем причина его устаревания в Hibernate 5?

А также этот вопрос не является дубликатом this question, поскольку я хочу знать причину отклонения запроса критериев.

Это из here.

Hibernate предлагает старую, унаследованную org.hibernate.Criteria API, который следует считать устаревшим. Никакая функция развития не будет нацелена на этих API. В конечном счете, характеристиками, специфичными для Hibernate, будут , портированные как расширения JPA javax.persistence.criteria.CriteriaQuery. Подробнее о API org.hibernate.Criteria см. В разделе Запросы критериев устаревшего спящего режима.

+0

Возможный дубликат [Hibernate 5 и типизированных запросов к критерию (JPA2)] (http://stackoverflow.com/questions/35824417/hibernate-5-and-typed-criteria-queries-jpa2) –

+0

Из [docs] (https://docs.jboss.org/hibernate/orm/4.2/devguide/en-US/html/apb.html): _ «Новая разработка должна быть сосредоточена на API JPA' javax.persistence.criteria.CriteriaQuery'. В конце концов, характеристики критериев, зависящих от Hibernate, будут перенесены как расширения JPA 'javax.persistence.criteria.CriteriaQuery'.» _ Кроме того, если вы хотите писать разборчивые запросы (вместо использования неуклюжего API критериев), посмотрите [QueryDSL] (http://www.querydsl.com/). –

+0

@MickMnemonic Не совсем дубликат. Я редактировал свой вопрос. –

ответ

8

Мы осуждаем API критериев вместо поддержки расширения JPA.

Рассмотрим это:

CriteriaBuilder cb = entityManager.getCriteriaBuilder(); 
HibernateCriteria hc = cb.unwrap(HibernateCriteria.class); 
... 
query.where(hc.someAwesomeThing(...)); 
List<SomeEntity> entities = entityManager.createQuery(query).getResultList(); 

Вопреки комментариям, мы сделать намерены продолжать поставлять Hibernate-специфические особенности, но мы хотим, чтобы ввести те через стандартный API вместо, а не пытаться управлять держать два очень разные API, которые должны быть взаимодополняющими в синхронизации.

+4

В настоящее время мой проект использует устаревший API критериев. Рекомендуется ли переписывать запросы с помощью HQL или CriteriaBuilder в соответствии с новыми рекомендациями? – Justas