【发布时间】:2016-01-13 18:17:49
【问题描述】:
当我执行以下代码时发生异常:
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 个查询(首先是集合,然后是查询)。我在您的查询中也没有看到
:list,所以不确定您绑定到什么。如何解决我不确定的问题,而不是使用 hibernate 使用普通的 JdbcTemplate 来执行查询。 -
请查看sqlfiddle.com/#!2/4f8a1/2中的查询执行情况,用于获取特定列的行之间的差异
-
尝试通过在
:字符前面放置一个 `\` 来转义它们
标签: java mysql spring hibernate