【问题标题】:Hibernate sql query error休眠sql查询错误
【发布时间】:2011-05-31 18:36:34
【问题描述】:

以下是查询:

    Query q = getSession().createQuery("FROM secroles 
                           WHERE secroles.SR_ORG = :srOrg , 
                                 secroles.SR_PROFILE= :srUser, 
                                 ISDELETED=:isDeleted");

错误:

org.hibernate.hql.ast.QuerySyntaxException: unexpected token: , near line 1, column 37 [FROM secroles WHERE SR_ORG = :srOrg , SR_PROFILE= :srUser , ISDELETED = :ISDELETED]

功能齐全:

public String getSecroleByOrgNID(Organization srOrg, Profile srUser){try {
        System.out.println("bug is here0");
        begin();
        Query q = getSession().createQuery("FROM secroles WHERE secroles.SR_ORG = :srOrg , secroles.SR_PROFILE= :srUser , ISDELETED=:isDeleted");
        q.setParameter("srOrg", srOrg);
        q.setParameter("srOrg", srUser);
        q.setBoolean("isDeleted", false);
        Secroles sr = (Secroles) q.uniqueResult();
        Roletable rt = sr.getSrRole();
        commit();
        return rt.getRoleName();
    } catch( HibernateException e ) {
        rollback();
        e.printStackTrace();
        System.out.println("Could not assign role\n Message: "+e.getMessage());
    }
return null;

}

}

【问题讨论】:

    标签: sql database hibernate


    【解决方案1】:

    我猜你输入的是, 而不是AND。

    您还应该使用类属性名而不是列名。所以可能是secroles.srOrg 而不是secroles.SR_ORG

    【讨论】:

    • 不工作,出现错误:org.hibernate.hql.ast.QuerySyntaxException: 意外令牌:,靠近第 1 行,第 37 列 [FROM secroles WHERE secroles.srOrg = :SR_ORGsrOrg , secroles.srUser= :SR_PROFILE , ISDELETED = :ISDELETED]
    • 你确定是同一个错误吗?您是否按照我的建议使用属性名称?因为你的名字看起来像列名。我的建议 - 将您的查询分配给变量,然后打印出来。然后发布带有确切错误消息的输出。
    • 还有什么是secroles?它应该是类名。
    • 将变量初始化为null,然后将查询分配给变量,输出中什么也没有。
    • 在 HQL 中,您应该使用类和属性语言。不是表格和列。使用其映射的类名和相应的属性。
    【解决方案2】:

    对多个子句使用 AND 而不是 ","。 WHERE子句的使用方法参考文档:http://docs.jboss.org/hibernate/core/3.3/reference/en/html/queryhql.html

    FROM secroles 
    WHERE secroles.SR_ORG = :srOrg AND
          secroles.SR_PROFILE= :srUser AND
          ISDELETED=:isDeleted
    

    【讨论】:

      【解决方案3】:

      您还可以根据上面的代码使用不同的变量将相同的参数绑定两次。我很确定这不会达到你的预期。

          q.setParameter("srOrg", srOrg);
          q.setParameter("srOrg", srUser);
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2010-09-24
        • 2011-08-10
        • 2015-01-25
        • 1970-01-01
        • 1970-01-01
        • 2016-07-12
        • 1970-01-01
        相关资源
        最近更新 更多