2011-04-05 2 views
1

J'ai des jours essayant de résoudre ce problème.S'il vous plaît aider à convertir ce SQL en JPQL, problème avec sous-requête (EclipseLink v2)

je dois avoir une ORDER BY et une limite dans une sous-requête, c'est le natif 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 
    ) 

Mais le problème est que ORDER BY est pas pris en charge par les sous-requêtes JPQL, soit LIMIT. La logique métier est la suivante: la sous-requête doit renvoyer le dernier état de l'opération définie principalement par la priorité et la date dans les lignes de l'historique du journal des opérations, c'est pourquoi j'en ai besoin et les clauses ORDER BY et LIMIT. J'ai besoin de cela en JPQL car j'ai développé une API pour les requêtes dynamiques, c'est un constructeur de requêtes, pour JPQL que j'ai besoin d'utiliser.

Merci d'avance.

Répondre

1

JPQL ne supporte pas cela. Vous devez utiliser une requête SQL native ou reformuler la requête ou utiliser plusieurs requêtes.

Vous pourriez potentiellement changer la sous-requête pour utiliser un max au lieu du orderby.

Vous pouvez enregistrer un bogue/une amélioration pour que le support orderby soit ajouté aux sous-sélections, mais la limite n'est pas standard SQL et ne fait pas partie de JPQL car elle est spécifique à la base de données.

Questions connexes