在hibernate中过滤计算列? (具有)

时间:2010-11-27 09:03:13

标签: java sql mysql database hibernate

假设我有一个包含两列X和Y的表。 我想通过hibernate运行以下查询:

SELECT X*X + Y*Y AS Distance, POINTS.* from POINTS 
WHERE X > 0 
AND Y > 0
HAVING Distance < 50

如何通过hibernate实现它?你能提供代码样本吗?

修改 - This question似乎密切相关。我没有把这个作为副本关闭的唯一原因是因为它提供了一个更简单的用例(没有GROUP BY)。

1 个答案:

答案 0 :(得分:0)

在SQL的大多数方言中,您不能使用“显示标签”或“AS名称”中的名称来引用查询正文中的表达式 - 这让人很懊恼。但是,您可以在WHERE子句中使用表达式。

SELECT X*X + Y*Y AS DistanceSquared, POINTS.* from POINTS 
 WHERE X > 0 
   AND Y > 0
   AND (X * X + Y * Y) < 50;

HAVING子句与聚合的聚合和比较相关联:

SELECT name, COUNT(*)
  FROM SomeWhere
 GROUP BY Name
HAVING COUNT(*) > 1;

HAVING条款中的条件必须(应该)涉及至少一个“直接”汇总;条件中的另一个术语可能是常量(如图所示)或另一个直接聚合,或子查询,可能涉及“间接”聚合。 (AFAIK,我为这个答案发明了'直接/间接'术语 - 你可能无法有效地搜索表达式。)