Hibernate生成的SQL对MS SQL无效

时间:2015-05-01 07:25:41

标签: java sql-server hibernate

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的列,它也在LEFT OUTER JOIN中被引用,并且该列不会导致错误。

删除别名projectele1_无效。

对我而言,这看起来像一个非常简单的SQL语句。我无法想象它有什么问题,错误信息根本没有帮助。任何想法可能是SQL的错误?

2 个答案:

答案 0 :(得分:3)

您的SQL语法是错误的。如果您将projectele1_.id添加到group by子句中它将起作用。只有聚合函数在select语句中使用group by子句。或者如果从select中删除projectele1_.id它将会工作得很好。

答案 1 :(得分:0)

我的错误。我应该多次阅读错误信息。 projectele1_id不在group by子句中。 MS SQL不允许在选择列表中包含此类列。这似乎是一致性检查。 太糟糕了,虽然HQL的使用导致了SQL Server中的这种异常但在MySQL服务器中没有导致