簡體   English   中英

如何在Hibernate中形成這個復雜的查詢?

[英]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

我目前有兩個已定義的對象( ErrorsEntityEventCodeEntity ),它們映射到表SERV_ERREVENT_CD

因此,此查詢的結果將是列表,但不是ErrorsEntityEventCodeEntity ,而是兩個實體的合並。

到現在為止,我的查詢已將所有返回的對象直接映射到一個表,如下所示:

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM