Динамическая сортировка 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 и отредактировать его во время выполнения.