Добавление предложения OrderBy в именованный запрос - PullRequest
2 голосов
/ 19 ноября 2010

Можно ли добавить предложение OrderBy в именованный запрос JPA во время выполнения?

Ответы [ 3 ]

2 голосов
/ 20 ноября 2010

Именованные запросы обрабатываются поставщиком сохраняемости при создании EntityManagerFactory. Вы не можете изменить / изменить / добавить что-либо об именованном запросе динамически во время выполнения.

Если вы используете JPA 2.0 и вам нужен способ выполнять высокопроизводительные динамические запросы во время выполнения, вам следует обратиться к Criteria API.

1 голос
/ 19 ноября 2010

Из документации Java EE 5: « Используется для указания именованного запроса на языке запросов Java Persistence, который является статическим запросом, выраженным в метаданных. Имена запросов ограничиваются единицей сохранения ».

Как говорится, он статический, и вы не можете изменить запрос во время выполнения.Вместо этого используйте пользовательский запрос или, если упорядоченный элемент является фиксированным, вы можете использовать аннотацию;

Поле:

@OrderBy(value="nickname")
List<Person> friends;

Метод:

@OrderBy("nickname ASC")
public List<Person> getFriends() {...};
0 голосов
/ 01 сентября 2016

Даже если вы не можете добавить предложение order-by в ваш именованный запрос, вы можете предоставить параметрический orderBy.Ниже приведен совершенно правильный запрос:

SELECT u FROM User u ORDER BY :orderBy

И вы собираетесь изменить порядок следующим образом:

query.setParameter("orderBy", "id");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...