Домой java Помните, что порядковые параметры основаны на 1! — HibernateTemplate

Помните, что порядковые параметры основаны на 1! — HibernateTemplate

539
0

проблема

Код HibernateTemplate…


getHibernateTemplate().find("from Domain d
where d.domainName = :domainName", domainName);

Когда я выполняю приведенный выше код, я получаю следующее сообщение об ошибке


java.lang.IndexOutOfBoundsException: Remember that ordinal parameters are 1-based!
...
at org.hibernate.impl.AbstractQueryImpl.determineType(AbstractQueryImpl.java:397)
at org.hibernate.impl.AbstractQueryImpl.setParameter(AbstractQueryImpl.java:369)

Решение

Я захожу внутрь и изучаю файл HibernateTemplate.java и нахожу код ниже


public List find(final String queryString, final Object[] values) throws DataAccessException {
return (List) executeWithNativeSession(new HibernateCallback() {
public Object doInHibernate(Session session) throws HibernateException {
Query queryObject = session.createQuery(queryString);
prepareQuery(queryObject);
if (values != null) {
for (int i = 0; i < values.length; i++) {
queryObject.setParameter(i, values[i]);
}
}
return queryObject.list();
}
});
}

Из приведенного выше кода HibernateTemplete использует 0, а не 1. Это проблема с библиотекой весной или в спящем режиме? Поскольку в сообщении об ошибке указанные параметры нужно начинать с 1-го. Я пробовал какое-то решение, такое как изменение весны или библиотеки гибернации, однако это не работает ...

ЧИТАТЬ ТАКЖЕ:  Постоянное значение всегда должно быть первым в сравнении

Кажется, я не в том направлении, мне нужно начинать поиск решения с самого начала, сначала я изучаю свой собственный код ............ !!! Я не могу представить, насколько я небрежен, я сделал глупую ошибку в своем коде, это не проблема весны или гибернации, это моя ошибка синтаксиса.

Меняться от


getHibernateTemplate().find("
from Domain d where d.domainName = :domainName", domainName);

к


getHibernateTemplate().find("
from Domain d where d.domainName = ?", domainName);

Проблема решена, код выполняется без ошибок.

Заметка
Сообщение об ошибке, сгенерированное HibernateTemplate, действительно вводит в заблуждение !!! зимовать

Помните, что порядковые параметры основаны на 1! — HibernateTemplate

0.00 (0%) 0 votes

ОСТАВЬТЕ ОТВЕТ

Пожалуйста, введите ваш комментарий!
пожалуйста, введите ваше имя здесь