当我执行以下代码时,出现异常:
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();
}
这种行为的原因是什么?
有点难以理解,您正在执行的查询到底是什么,但是如果您需要在本机查询中使用冒号字符,在您的情况下作为“分配值”运算符,您应该使用转义所有出现的冒号\\
在带有查询的 java 字符串中,所以它可能是这样的:
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;
Update:似乎,还不可能在 Hibernate 本机查询中转义冒号,有一个开放问题关于它。这意味着,您无法在 Hibernate 本机查询中使用冒号而不是命名参数。您可以尝试创建一个函数并调用它,而不是调用查询。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)