Динамическая сортировка NamedQuery? Шов / Hibernate / JPA - PullRequest
7 голосов
/ 23 ноября 2010

У меня определено несколько 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 ]

5 голосов
/ 23 ноября 2010

Именованные запросы не могут быть изменены во время выполнения.

// ----- Отредактированная часть

public void getOrders(String orderByElement){

    String query = "SELECT DISTINCT o FROM MyObject o ORDER BY " + orderByElement;

    entityManager.createQuery(query).getResultList();
}

Это специфично для JPA.

3 голосов
/ 10 июня 2011

См. Мое решение в hibernate-named-query-order-by-partameter

Основная идея состоит в том, чтобы хранить запрос без предложения 'order by' и редактировать его во время выполнения.

...