java - Hibernate遇到mysql异常:= operator

标签 java mysql spring hibernate

当我执行下面的代码时,出现了异常:

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();
    }

这种行为的原因是什么?

最佳答案

有点难以理解,您正在执行的查询到底是什么,但是如果您需要在 native 查询中使用冒号字符,在您的情况下作为“赋值”运算符,您应该转义所有冒号\\ 在你的 java String 中出现,所以它可能是这样的:

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 原生查询中还不可能转义冒号,有一个 open issue关于它。这意味着,您不能在 Hibernate native 查询中使用冒号而不是命名参数。您可以尝试创建一个函数并调用它而不是调用查询。

关于java - Hibernate遇到mysql异常:= operator,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33146012/

相关文章:

java - 如何将 yandex API JAVA 文件包含到 android 项目中

java - 将用户的键盘输入过滤到 JTextField (swing)

php - SQL注入(inject)和addSlashes

java - 如何获取 Spring 4.1 使用的 Jackson ObjectMapper?

java - Spring 安全 : Username is sent empty for login after upgrade to Spring-Security 4. 1

java - 使用单独的 application.properties 创建 Spring Boot 测试

java - 在 .jar 和 eclipse 中使用相同的字符串计算查找资源

mysql - 合并两个有键冲突的 SQL 表

mysql - 糟糕的 MySQL LEFT JOIN 性能达到分组最大值

spring - 如何通过 MockMvc 为每个请求设置 servlet 路径