Получение неверного индекса параметра 1 из простого запроса HQL - PullRequest
1 голос
/ 16 мая 2011

У меня следующий HQL-запрос, и для простоты предположим, что сопоставления и имена таблиц правильные.

String queryString = "from entity as vv inner join vv.childentity as vis with childentityid=?";
Query query = session.createQuery(queryString);
query.setParameter(0, someVarId);
List<entity> entities = query.list();

Я получаю следующую ошибку при попытке выполнить это:

ОШИБКА: не удалось связать значение «12» с параметром: 1; Неверный индекс параметра 1.

Я подозреваю, что это может быть связано с тем, что HQL неявно не поддерживает параметры привязки в предложении WITH. Я не могу найти никаких документов, говорящих, что это не поддерживается, и я RTFM.

Кто-нибудь может подтвердить, что это правда или что это известная ошибка в Hibernate, или хороший обходной путь тоже подойдет.

РЕДАКТИРОВАТЬ: я забыл упомянуть, что я получаю ту же ошибку, даже если использовать именованный параметр.

Ответы [ 4 ]

1 голос
/ 16 мая 2011

Полагаю, вам нужно использовать полное имя в with предложении:

from entity as vv inner join vv.childentity as vis with vis.childentityid=?"
1 голос
/ 16 мая 2011

Спасибо за вашу помощь, но я понял странность.

Когда я соединяю два объекта в HQL, это должно быть сделано так.

from entity as vv where childentityid=?

Я обнаружил, что я нена самом деле мне не нужно присоединяться к ним, я не уделял HQL достаточно внимания, чтобы посмотреть на сопоставления объектов и определить, что у сущности есть свойство, называемое childentity, и поэтому childentityid является его уникальным идентификатором.

Спасибо зався ваша помощь.

0 голосов
/ 12 декабря 2017

Не имеет прямого отношения к вашей конкретной проблеме, но я пришел к этой теме с помощью поисковой системы.

Произошла та же ошибка "Недопустимый индекс параметра 1" и есть две подсказки:

  1. Для всех, кто приходит от простого java.sql.Зак прав - вы должны начать считать с 1. Для JBoss / HBL вы должны начать считать с 0.
  2. Моя настоящая ошибка заключалась в том, что я использовал кавычки вокруг заполнителя.(например, «ВЫБЕРИТЕ foo FROM bar, ГДЕ foobar как '?';")

Как уже упоминалось, мой ответ - прояснить эту тему в случае, если вы пришли из простого java.sql.

0 голосов
/ 16 мая 2011

query.setParameter (0, someVarId) должен быть: query.setParameter (1, someVarId)

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