Создание запросов с использованием JPQL - Исключение синтаксиса запроса - PullRequest
2 голосов
/ 18 ноября 2010

Когда я запускаю метод: dao.query("SELECT p FROM Profile p WHERE p.group = :id ORDER BY p.datestamp :key", map); я получаю следующую ошибку:

org.hibernate.hql.ast.QuerySyntaxException: неожиданный токен:: возле линии 1, колонка 93 [ВЫБРАТЬ p ИЗ ПРОФИЛЯ p ГДЕ p.group =: id ORDER BY p.datestamp: ключ]

Ниже приведена реализация метода запроса; кто-нибудь видит что не так?

public List<?> query(String criteria, HashMap<String, ?> args) {
        Query sqlQuery = this.em.createQuery(criteria);
        Set<String> keys = args.keySet();
        Iterator<String> iter = keys.iterator();
        while (iter.hasNext()) {
            String key = iter.next();
            sqlQuery.setParameter(key, args.get(key));
        }
        return sqlQuery.getResultList();
    }

Ответы [ 2 ]

4 голосов
/ 18 ноября 2010

Нельзя использовать параметры для указания направления сортировки, поскольку параметр нельзя использовать в произвольных местах запроса.Из спецификации JPA:

Входные параметры могут использоваться только в предложении WHERE или предложении HAVING запроса.

Таким образом, в JPA 1.0 необходимо создать строку запросас соответствующим предложением ORDER вручную.

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

0 голосов
/ 18 ноября 2010

Я думаю, вам нужна запятая после ORDER BY p.datestamp и до :key

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...