假设我有一个包含X和Y两列的表格。
我想通过休眠运行以下查询:
SELECT X*X + Y*Y AS Distance, POINTS.* from POINTS
WHERE X > 0
AND Y > 0
HAVING Distance < 50
如何通过休眠实现它?您可以提供代码示例吗?
编辑-This question似乎密切相关。我不关闭此副本的唯一原因是因为它提供了更为简单的用例(没有GROUP BY)。
最佳答案
在大多数SQL方言中,您不能使用“显示标签”或“ AS名称”中的名称来引用查询主体内部的表达式,这在很大程度上让人感到cha恼。但是,您可以在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,我已经为此答案发明了“直接/间接”术语-您可能无法有效地搜索该表达式。)
关于java - 在 hibernate 状态下对计算列进行过滤? (有),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4290850/