使用SQL EXCEPT和count(*)时出现QuerySyntaxException

时间:2014-02-26 02:09:10

标签: sql hibernate grails spring-data

我在Hibernate中有一种情况,我需要在SQL EXCEPT查询中获取count(*)。以下是查询(模仿我的原始代码):

String query = """ 
               select count(*) as totalCount 
               from ( select distinct id from Employee 
                      where name like '%Roger% 
                      EXCEPT select distinct id from Manager ) Temporary
               """

现在,当我说:

hibernateSession.createQuery(query);

抛出以下异常:

org.hibernate.hql.ast.QuerySyntaxException: 
                    unexpected token: ( near line 1, column 36

当我捕获异常时,我的日志还会显示以下解析错误:

org.hibernate.hql.PARSER    line 1:36: unexpected token: (
org.hibernate.hql.PARSER    line 14:315: unexpected token: EXCEPT
org.hibernate.hql.PARSER    line 15:68: unexpected token: from

我无法避免计数,WHERE或EXCEPT。

2 个答案:

答案 0 :(得分:1)

因为你正在使用hibernateSession.createQuery(query),所以hibernate正在使用HQL语法创建一个查询,这对你的查询无效,因为你正在使用SQL语法。

您最有可能需要使用类似hibernateSession.createSQLQuery(query)的内容。

有关使用本机sql查询的更多信息,请参阅Hibernate文档中的Native SQL

related question的答案也可能有用。

答案 1 :(得分:0)

您可以尝试此查询吗?用NOT EXISTS替换了EXCEPT。

String query = """ 
           select count(*) as totalCount 
           from ( select distinct id from Employee as emp
                  where emp.name like '%Roger% 
                  and not exists ( 
                      from Manager as m where emp.id = m.id
                  ) 
                ) Temporary
           """