2011-04-05 44 views
1

我有幾天試圖解決這個問題。請幫助將此SQL轉換爲JPQL,子查詢問題(EclipseLink v2)

我需要有一個ORDER BY和子查詢有限制,這是本地SQL:

SELECT 
    ope.idOperacion AS OperationID, 
    est.nombre AS LastStatusName 
FROM 
    SSCM_4.Operaciones4 ope 
INNER JOIN SSCM_4.BitacoraOperaciones4 bita 
ON 
    bita.operacion = ope.idOperacion 
INNER JOIN SSCM_4.Estatus4 est 
ON 
    est.idEstatus = bita.estatus 
WHERE 
    ope.idOperacion = 54 
AND bita.idBitacoraOperacion = 
    (
     SELECT 
      BO2.idBitacoraOperacion 
     FROM 
      SSCM_4.BitacoraOperaciones4 BO2 
     INNER JOIN SSCM_4.Estatus4 EST2 
     ON 
      (
       BO2.Estatus = EST2.idEstatus 
      ) 
     WHERE 
      BO2.Operacion = ope.idOperacion 
     ORDER BY 
      EST2.Prioridad DESC, 
      BO2.FechaOperacion DESC, 
      BO2.idBitacoraOperacion ASC LIMIT 1 
    ) 

但問題是,ORDER BY沒有在子查詢的JPQL支持,無論是極限。

業務邏輯是這樣的:子查詢必須返回操作的最後一個狀態,主要由操作日誌歷史中的優先級和日期定義,這就是爲什麼我需要和ORDER BY和LIMIT子句。

我在JPQL中需要這個,因爲我開發了一個用於動態查詢的API,它是一個查詢生成器,用於我需要使用的JPQL。

預先感謝您。

回答

1

JPQL不支持這一點。您需要使用本機SQL查詢,或者重新調整查詢,或使用多個查詢。

您可能會更改子查詢以使用max而不是orderby。

您可以記錄一個bug /增強以將order by支持添加到子選擇中,但限制不是標準SQL,也不是JPQL的一部分,因爲它是數據庫特定的。