[英]How do I form this complex query in Hibernate?
我正在使用Hibernate,Spring HATEOAS和Jackson來構建REST服務。 我正在添加一種方法,該方法返回查詢結果的JSON表示形式,如下所示;
SELECT ERRORS.DMN_NAM, CODES.MSG_TXT,
FROM SERV_ERR ERRORS, EVENT_CD CODES
WHERE ERRORS.SERV_RESP_CD_TXT = CODES.CD_TXT
GROUP BY ERRORS.DMN_NAM, ERRORS.SERV_NAM, CODES.MSG_TXT,
ERRORS.SERV_ERR_CNT, ERRORS.ERR_TS_NUM
ORDER BY ERRORS.DMN_NAM, CODES.MSG_TXT
我目前有兩個已定義的對象( ErrorsEntity
和EventCodeEntity
),它們映射到表SERV_ERR
和EVENT_CD
。
因此,此查詢的結果將是列表,但不是ErrorsEntity
或EventCodeEntity
,而是兩個實體的合並。
到現在為止,我的查詢已將所有返回的對象直接映射到一個表,如下所示:
public List<ErrorsEntity> getErrors(double daysPrevious, double hoursToShow);
在Hibernate中處理查詢結果不是將對象映射到單個表的最佳方法是什么?如何在HQL中編寫此查詢?
最好堅持使用SQL查詢,因為HQL僅在您計划從結果實體更改狀態時才有意義。 在您的情況下,SQL是更好的選擇,因為它實際上並沒有遵循標准,並且您只想進行投影。 您可以通過與眾不同的方式刪除組,但它將需要一個派生表,無論如何都可以使用普通SQL來完成。
List dtos = s.createSQLQuery(
"SELECT " +
" ERRORS.DMN_NAM AS dmnNam, " +
" CODES.MSG_TXT AS msgTxt " +
"FROM SERV_ERR ERRORS, EVENT_CD CODES " +
"WHERE ERRORS.SERV_RESP_CD_TXT = CODES.CD_TXT " +
"GROUP BY " +
" ERRORS.DMN_NAM, " +
" ERRORS.SERV_NAM, " +
" CODES.MSG_TXT, " +
" ERRORS.SERV_ERR_CNT, " +
" ERRORS.ERR_TS_NUM " +
"ORDER BY " +
" ERRORS.DMN_NAM, " +
" CODES.MSG_TXT "
.addScalar("dmnNam")
.addScalar("msgTxt")
.setResultTransformer( Transformers.aliasToBean(MyDTO.class))
.list();
確保YourDTO具有匹配的構造函數,並且類型與ee.dmn.nam和ece msgTxt完全相同。
而不是按組選擇:
SELECT dmnNam, msgTxt
FROM (
SELECT DISTINCT
ERRORS.DMN_NAM AS dmnNam,
ERRORS.SERV_NAM,
CODES.MSG_TXT AS msgTxt,
ERRORS.SERV_ERR_CNT,
ERRORS.ERR_TS_NUM
FROM SERV_ERR ERRORS, EVENT_CD CODES
WHERE ERRORS.SERV_RESP_CD_TXT = CODES.CD_TXT
ORDER BY
dmnNam,
msgTxt
) as DATA
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.