Запрос критериев JPA, заказ по классу - PullRequest
8 голосов
/ 15 ноября 2010

Есть ли способ с запросами критериев JPA сделать заказ на class ?Представьте себе следующие доменные объекты:

abstract class Hobby { ... }
class Coding extends Hobby { ... }
class Gaming extends Hobby { ... }

Используя обычный QL, я смог сделать

from Hobby h order by h.class

Но когда я применяю ту же логику к запросу критерия, неизвестный атрибут исключения времени выполнения ""происходит.

CriteriaQuery<Hobby> criteriaQuery = builder.createQuery(Hobby.class);
Root<Hobby> hobbyRoot = criteriaQuery.from(Hobby.class);
criteriaQuery.orderBy(builder.asc(hobbyRoot.get("class"));
List<Hobby> hobbies = entityManager.createQuery(criteriaQuery).getResultList();

Используемая реализация JPA: Hibernate-EntityManager v3.5.5-Final

1 Ответ

9 голосов
/ 16 ноября 2010

В JPA 2.0 введено новое выражение TYPE, которое позволяет запросу ограничивать результаты на основе типов классов.

Вы можете использовать выражение типа с Criteria API, используя Path#type(). Так что вы могли бы попробовать :

CriteriaQuery criteriaQuery = builder.createQuery(Hobby.class);
Root hobbyRoot = criteriaQuery.from(Hobby.class);
criteriaQuery.orderBy(builder.asc(<b>hobbyRoot.type()</b>);
List hobbies = entityManager.createQuery(criteriaQuery).getResultList();

Пока этот код компилируется, я его не тестировал (завтра попробую).

На самом деле, мне интересно, является ли это законным или type() должен быть частью выбора, чтобы order by его (возможно, именно это должен генерировать запрос критерия). Нужно проверить это.

Ссылки

  • спецификация JPA 2.0
    • Раздел 4.6.17.4 «Выражения типов сущностей»

Больше ресурсов

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...