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

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

Мне нужно иметь 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, который мне нужно использовать.

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

1 Ответ

1 голос
/ 06 апреля 2011

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

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

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

...