2016-04-19 15 views
0

Meine hql Abfrage ist unten gezeigt, aber es ist nicht die Reihenfolge der Datensätze von a.remoteCreatedAt Spalte, bitte helfen Sie mir, wenn es einen Fehler in der Reihenfolge nach Klausel.Sortieren nach Klausel funktioniert nicht im Ruhezustand

SELECT c 
FROM Comic c 
JOIN FETCH c.album a 
JOIN FETCH a.media m 
JOIN FETCH c.user u 
LEFT JOIN FETCH a.user ow 
LEFT JOIN FETCH c.channel channel 
LEFT JOIN FETCH c.categories cc 
WHERE a.publishedAt !=NULL 
    AND channel.uniqueName IN (:channelUniqueNames) 
    AND channel.active = TRUE 
    AND c.active=TRUE 
    AND c.visibilityType='PUBLIC' 
ORDER BY CASE 
      WHEN a.remoteCreatedAt !=NULL THEN a.remoteCreatedAt 
      ELSE a.publishedAt 
     END DESC 
+0

Sie sollten diese Frage entfernen, weil es kein Problem mit der Abfrage gab, wie Sie in Ihrer eigenen Antwort unten notieren. Wenn Sie die Frage aufheben, wird es für andere Leser verwirrend sein. – carbontax

+0

Wie kann ich die Frage löschen? Ich denke, dass ich das nicht tun könnte, weil es eine Antwort gibt, die mehr als einmal abgestimmt wird. –

Antwort

4

Ein Problem, das ich mit Ihrer ORDER BY CASE WHEN Aussage aufgefallen ist, dass Sie mit dem != nulls vergleichen Betreiber versuchen. Stattdessen sollten Sie IS NOT NULL werden:

ORDER BY CASE 
      WHEN a.remoteCreatedAt IS NOT NULL THEN a.remoteCreatedAt 
      ELSE a.publishedAt 
     END DESC 

Diese ungetestet ist und es andere Probleme mit Ihrer Anfrage sein kann, aber hoffentlich diese Regeln aus ein möglicher Grund für Ihren Fehler/unerwartete Ergebnisse.

+0

Hallo Tim, ich habe das versucht, aber das hat nicht geholfen. ! = Der Operator scheint gültig zu sein (intern wird der Hibernate in "is not null" konvertiert), da ich die SQL-Abfrage für dieses hql überprüft habe. Wenn Sie möchten, kann ich Ihnen das SQL-Äquivalent dieses von Hibernate generierten hql geben. –

0

Es gab kein Problem in der Abfrage. Eigentlich wurde diese Abfrage nicht ausgeführt. Sorry für Ärger. Danke Tim für deine Zeit. Ich habe auch viele andere Dinge gelernt.