Предложение JPQL ORDER BY с параметром
Я пытаюсь написать запрос JPQL с предложением ORDER BY:
query = "SELECT c FROM item ORDER BY c.name ASC"
Я хотел бы установить параметр "порядок", значение которого будет либо "ASC", либо "DESC":
query = "SELECT c FROM item ORDER BY c.name :order"
И затем в моей реализации:
query.setParameter("order", "ASC");
Это когда я получаю ошибку Hibernate:
org.hibernate.HibernateException: Errors in named queries
Любая идея о том, что я делаю неправильно? Спасибо!
Ответы
Ответ 1
"ASC" или "DESC" не может быть параметром запроса. Вместо этого вы можете использовать конкатенацию строк.
query = "SELECT c FROM item ORDER BY c.name " + sortOrder;
Вы должны проверить, что содержимое sortOrder
может быть только ASC или DESC и не поступает непосредственно от пользователя.
Ответ 2
Если вы хотите использовать именованные запросы здесь, вам понадобятся два из них (именованные запросы являются статическими, и вы не можете использовать ASC и DESC в качестве параметра, как указано в @Mark).
Ответ 3
Вместо того, чтобы дважды писать именованный запрос, содержащий предложение "order by", вы можете реализовать свой DAO следующим образом:
public List<MyEntity> findByAttribute(boolean desc,...){
TypedQuery<MyEntity> q = em.createNamedQuery(...
q.setParameter(...
List<MyEntity> result = q.getResultList();
if(desc){
Collections.reverse(result );
}
return result;
}