Каков способ JPA CriteriaBuilder для фильтрации по подклассам?
JPA 2.0 предоставляет средство фильтрации по подклассу с использованием типа выражений JPQL, например:
SELECT e
FROM entity e
WHERE TYPE(e) = :entityType
Где параметр entityType будет значением столбца дискриминатора.
Каков рекомендуемый способ достижения того же результата с помощью конструктора критериев JPA, учитывая, что столбец дискриминатора, по-видимому, недоступен?
Я использую JPA 2.1, и пока единственное решение, которое кажется адекватным, - это отображение столбца дискриминатора в поле только для чтения внутри сущности Java, но я не уверен, что это поддерживаемая функция.
2 ответов:
Примеры распространенных запросов приведены здесь
Пример:
CriteriaBuilder cb = em.getCriteriaBuilder(); CriteriaQuery cq = cb.createQuery(); Root e = cq.from(Entity.class); cq.where(cb.equal(e.type(), entityType)); Query query = em.createQuery(cq); List<Entity> result = query.getResultList();
Вы можете использовать метод типа пути , как описано здесь :
Predicate p = cb.equal(e.type(), cb.literal(Entity.class));
Comments