我在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。
答案 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
"""