Подтвердить что ты не робот

Предложение 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

Любая идея о том, что я делаю неправильно? Спасибо!

4b9b3361

Ответ 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;
}