我正在嘗試將 JPQL 等同于以下 SQL。
SELECT last_name, COUNT(1) AS c
FROM actor
GROUP BY last_name
HAVING c > 1
ORDER BY c DESC
我嘗試使用以下 JPQL。
SELECT e.lastName, COUNT(e.lastName) AS c
FROM Actor
GROUP BY e.lastName
HAVING c > 1
ORDER BY c DESC
Hibernate 生成以下 SQL 并抱怨。
select
actor0_.last_name as col_0_0_,
count(actor0_.last_name) as col_1_0_
from
actor actor0_
group by
actor0_.last_name
having
c>=?
order by
col_1_0_ DESC limit ?
當我像這樣更改 JPQL 時,它可以作業。
SELECT e.lastName, COUNT(e.lastName) AS c
FROM Actor
GROUP BY e.lastName
HAVING COUNT(e.lastName) > 1
ORDER BY c DESC
如何使用以c該HAVING子句命名的別名?
如果我不能,查詢可以嗎?有什么最佳方法嗎?
謝謝你。
uj5u.com熱心網友回復:
JPQL 不支持在HAVING子句中使用別名,主要是因為并非所有 SQL 引擎都支持這種行為。例如,Oracle 和 Postgres 都不支持您的第一個版本的查詢。
如果要使用純 JPQL,則只需在HAVING子句中重復整個計數運算式。如果您真的想在HAVING子句中重用別名,那么將您的查詢設為本地查詢,假設 MySQL 是底層資料庫,它將毫無問題地運行。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/479376.html
