假设我有一个包含两列的表格,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)。
最佳答案
在大多数 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 子句中的条件必须(应该)涉及至少一个“直接”聚合;条件中的另一个术语可能是常量(如图所示)或另一个直接聚合,或子查询,可能涉及“间接”聚合。 (据我所知,我为这个答案发明了“直接/间接”术语——您可能无法有效地搜索该表达式。)
关于java - 在 hibernate 中过滤计算列? (拥有),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4290850/