2011-05-31 136 views
0

以下是查询:Hibernate的SQL查询错误

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; 

} 

}

回答

2

你把,代替AND,我猜。

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

+0

不工作,得到了错误: org.hibernate.hql.ast.QuerySyntaxException:意外的标记:,近线1,列37 FROM secroles WHERE secroles.srOrg =:SR_ORGsrOrg,secroles.srUser =: SR_PROFILE,ISDELETED =:ISDELETED] – 2011-05-31 18:54:27

+0

你确定它是一样的错误吗?你是否按照我的建议使用了财产名称?因为你的名字看起来像列名。我建议 - 将您的查询分配给变量,并打印出来。然后用精确的错误信息发布输出。 – 2011-05-31 18:57:49

+0

什么是白纹?它应该是类名。 – 2011-05-31 18:58:55

0

而且你绑定相同的参数,根据上面的代码中使用不同的变量的两倍。我很肯定,这不会做你期望的。

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