Динамическая сортировка NamedQuery? Шов / спящий режим/JPA
у меня есть несколько NamedQuery
определено, и я хотел бы иметь возможность сортировать по полю для сущности динамически, без необходимости создавать уникальные NamedQuery
для каждого поля, которое я хочу отсортировать. Например:
у меня есть объект MyObject с полями "a", " b " и "c". Мой базовый запрос "SELECT DISTINCT o FROM MyObject o
", но я хотел бы уметь добавлять ORDER BY
предложение к моему запросу. В идеале я мог бы сделать что-то вроде именованных параметров, где мой запрос будет выглядеть например:
SELECT DISTINCT o FROM MyObject o ORDER BY :order
затем я бы указал поле (a, b, c), которое я хочу отсортировать. Есть ли способ сделать это с помощью Seam/Hibernate/JPA? Есть ли лучшая стратегия для решения этой проблемы?
2 ответов
именованные запросы нельзя изменить во время выполнения.
//----- редактировать-часть
public void getOrders(String orderByElement){
String query = "SELECT DISTINCT o FROM MyObject o ORDER BY " + orderByElement;
entityManager.createQuery(query).getResultList();
}
его специфичность JPA.
см. мое решение в hibernate-named-query-order-by-partameter
основная идея состоит в том, чтобы сохранить запрос без предложения order by и отредактировать его во время выполнения.