Содержание
проблема
Код 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, действительно вводит в заблуждение !!! зимовать
0.00 (0%) 0 votes




