[英]Chose grouping based on parameter in Hibernate named query
我有一個在XML配置中定義的Hibernate命名查詢。
該查詢生成有關人員的人口統計信息的匯總報告。 我們住的地方,那個人可能住在一個省或一個縣。
我想知道是否可以基於休眠查詢參數按省或縣聚合查詢。
這是我嘗試過的:
SELECT to_char(case when :groupReportBy = 'province' then PROVINCE else COUNTY end),
COUNT(distinct PERSON_TABLE.PERSON_ID) as {personReport.numOfPeople}
--, There are some other aggregation things that happen here as well
FROM
PERSON_TABLE PI
WHERE
PI.BDATE >= date '2014-01-01' and PI.BDATE <= date '2014-12-31'
GROUP BY
case when :groupReportBy = 'province' then PROVINCE else COUNTY end);
參數名稱是:groupReportBy。 如果我用硬編碼“省”而不是參數名稱,則此查詢將起作用,但是如果如上所示運行它,則會出現以下錯誤:
ORA-00979: not a GROUP BY expression
00979. 00000 - "not a GROUP BY expression"
*Cause:
*Action:
我從Java代碼執行查詢,如下所示:
private List getReport (String namedQuery, String groupReportBy) {
Session session = sessionFactory.getCurrentSession();
Query query = session.getNamedQuery(namedQuery);
query.setParameter("reportBy", reportBy);
return query.list();
}
我正在使用Oracle數據庫。
我真的希望不必使用Criteria API重新編寫這些查詢。 實際上,它們長久以來都是超級騙子,其中有很多。
有沒有辦法在SQL中做到這一點?
我從未使用組參數對其進行過測試,但是我認為它的行為與JPQL / HQL查詢的其他部分相同。 NamedQueries是預編譯的,因此以后不能更改(參數除外)。
我花了2分鍾的時間研究了JPA規范,但沒有找到確切的定義,可以在運行時進行修改。 因此,以下內容可能不是100%正確的,但對您來說應該足夠了。
JPQL / HQL在運行時無法在NamedQuery中更改關鍵字和模型對象屬性,其原因可能是查詢已轉換為基於對象的表示形式。 因此,您有必要編寫一個標准的JPQL / HQL查詢。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.