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

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

проблема

Код 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. Это проблема библиотеки Spring или гибернации? Поскольку в сообщении об ошибке указанные параметры должны начинаться с 1. Я попробовал какое-то решение, например, изменить библиотеку Spring или гибернации, но оно не работает ...

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

Меняться от

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

To

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

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

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