JPA / Hibernate Query не распознают именованные параметры - PullRequest
0 голосов
/ 03 января 2019

Этот метод не работает с параметрами

    @Override
public List<T> findBy2Params(Class c, String param1, String value1, String param2, String value2) {

    Query q = em.createQuery("select o from :class o where o.:param1 =   ':value1' "
            + " and o.:param2 = 'value2' ");
    q.setParameter("class", c.getName());
    q.setParameter("param1", param1);
    q.setParameter("value1", value1);
    q.setParameter("param2", param2);
    q.setParameter("value2", value2);
    return q.getResultList();
}

выдает ошибку ":"; не обрабатывает его как параметр

java.lang.IllegalArgumentException: org.hibernate.hql.internal.ast.QuerySyntaxException: неожиданный токен:: рядом со строкой 1, столбец 15 [выберите o из: class o, где o.:param1 = ': value1' и o.:param2 = 'value2']

1 Ответ

0 голосов
/ 03 января 2019

Ваш запрос не будет работать, потому что вы не можете связать имена таблиц или столбцов подобным образом.

Имя таблицы и связанные столбцы должны быть известны, когда план исполнения вступает в действие, это происходит до того, как параметрсвязывание.

Единственный способ сделать это - заменить эти значения перед передачей в HQL или использовать более динамичный подход для построения запроса во время выполнения, например, с помощью API Criteria.

...