Hibernate生成的SQL对MS SQL无效

csga3l58  于 2022-11-14  发布在  其他
关注(0)|答案(2)|浏览(98)

Hibernate(HQL)生成了以下SQL,我为其插入了参数:

select 
sum(activity0_.calculated_work) as col_0_0_
, employee2_.id as col_1_0_
, projectele1_.id as col_2_0_ 

from 
activity activity0_ 
inner join generic_object activity0_1_ on activity0_.id=activity0_1_.id 
left outer join project_element projectele1_ on     activity0_.project_element_id=projectele1_.id 
left outer join employee employee2_ on activity0_.owner_id=employee2_.id 
left outer join org_unit orgunit3_ on employee2_.org_unit_id=orgunit3_.id 

where 
activity0_1_.deleted=0 and 
activity0_.client_id=22 

 group by 
 employee2_.id order by SUM(activity0_.calculated_work) DESC

错误消息:列‘project_element.id’在选择列表中无效,因为它既未包含在聚合函数中,也未包含在GROUP BY子句中。
我直接在SQL Server Studio中执行此SQL,结果相同。我评论了这句话:

, projectele1_.id as col_2_0_

然后,该SQL被SQL Server接受
表PROJECT_ELEMENT肯定有一个名为id的列,它也在左外部连接中被引用,在那里该列不会导致错误。
删除别名项目1_没有任何效果。
对我来说,这看起来像是一条非常简单的SQL语句。我无法想象它出了什么问题,错误消息一点帮助也没有。你知道SQL可能出了什么问题吗?

u59ebvdq

u59ebvdq1#

您的SQL语法错误。如果您将projectele1_.id添加到GROUP BY子句中,它将正常工作。只有聚合函数在带有GROUP BY子句的SELECT语句中工作。或者,如果您从SELECT中删除projectele1_.id,它将正常工作。

mfuanj7w

mfuanj7w2#

是我的错。我应该已经多次阅读错误消息。projectele1_id不在group by子句中。MS SQL不允许将这样的列包括在选择列表中。这似乎是一种一致性检查。然而,糟糕的是,HQL的使用在SQL Server中导致了这样的异常,但在MySQL Server中却没有。

相关问题