Пожалуйста, помогите преобразовать этот SQL в JPQL, проблема с подзапросом (EclipseLink v2)

У меня есть дни, чтобы решить эту проблему.

Мне нужно иметь ORDER BY и LIMIT в подзапросе, это собственный 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, ни в LIMIT.

Бизнес-логика такова: подзапрос должен возвращать последний статус операции, определяемый в основном приоритетом и датой в строках истории журнала операций, поэтому мне нужны предложения ORDER BY и LIMIT.

Мне это нужно в JPQL, потому что я разработал API для динамических запросов, это построитель запросов для JPQL, который мне нужно использовать.

Заранее спасибо.


person Xavier Callejas    schedule 05.04.2011    source источник


Ответы (1)


JPQL не поддерживает это. Вам нужно либо использовать собственный SQL-запрос, либо перефразировать запрос, либо использовать несколько запросов.

Вы можете изменить подзапрос, чтобы использовать max вместо orderby.

Вы можете зарегистрировать ошибку / улучшение, чтобы добавить поддержку orderby в подвыборки, но limit не является стандартным SQL и не является частью JPQL, поскольку он зависит от базы данных.

person James    schedule 06.04.2011