Исключение гибернации при обнаружении оператора mysql:=
Когда я выполняю следующий код, возникает исключение:
Exception: org.springframework.orm.hibernate3.HibernateQueryException:
Not all named parameters have been set
Вот мой код:
queryString = SET @quot=0,@latest=0,@comp='';
select B.* from (
select A.time,A.change,IF(@comp<>A.company,1,0) as LATEST,@comp:=A.company as company from (
select time,company,quote-@quot as `change`, @quot:=quote curr_quote
from stocks order by company,time) A
order by company,time desc) B where B.LATEST=1;
list = getHibernateTemplate().executeFind(new HibernateCallback(){
public Object doInHibernate(Session session)throws HibernateException,SQLException {
SQLQuery query = session.createSQLQuery(queryString);
query.setParameterList("list", custIds);
return query.list();
}
В чем причина такого поведения?
2 ответа
Немного сложно понять, какой именно запрос вы выполняете, но если вам нужно использовать символ двоеточия в нативном запросе, в вашем случае в качестве оператора "назначить значение", вы должны избежать всех вхождений двоеточия с помощью \\
в вашей строке Ja va с запросом, так что это может быть как:
select B.* from (
select A.time,A.change,IF(@comp<>A.company,1,0) as LATEST,@comp\\:=A.company as company from (
select time,company,quote-@quot as `change`, @quot\\:=quote curr_quote
from stocks order by company,time) A
order by company,time desc) B where B.LATEST=1;
Обновление: кажется, пока невозможно избежать двоеточий в собственных запросах Hibernate, существует открытая проблема по этому поводу. Это означает, что вы не можете использовать двоеточия в собственных запросах Hibernate не для именованных параметров. Вы можете попытаться создать функцию и вызвать ее вместо вызова запроса.
Вы можете создать именованный запрос и затем использовать его в репозитории Spring jpa или hibernate. Эта ссылка помогла мне от подобной проблемы.