2013-04-30 10 views
9

AKTUALISIERT ignoriert. Ich habe versucht, ein TypedQuery zu verwenden und bemerkte, dass es scheint einfach alles zu ignorieren nach „NULLS LAST“ - keine Fehler werfen, ignoriert es einfach:JPQL Hibernate NULLS LAST

String sql = "SELECT c FROM Contact c WHERE c.partnerCode =:pCode and c.activeFlag='Y'" + 
      " ORDER BY c.primaryFlag DESC NULLS LAST, c.lastName ASC"; 

    TypedQuery<Contact> query = em.createQuery(sql, Contact.class); 
    query.setParameter("pCode", partnerCode);  

    return query.getResultList(); 

Das ist mein Ergebnis liefert durch primäre Flag descendings bestellt, Nullen zuerst, ignorieren Sie die Sortierung nach dem Nachnamen.

Wenn ich dies tun:

 String sql = "SELECT c FROM Contact c WHERE c.partnerCode =:pCode and c.activeFlag='Y'" + 
      " ORDER BY c.primaryFlag DESC, c.lastName ASC"; 

ich sowohl primäre als auch Nachname Art, aber immer noch zuerst mit Nullen am Ende, weil es sich um eine Oracle-DB ist.

Ich war größtenteils überrascht, dass keine Fehlermeldung geworfen wurde, als ich NULLS LETZTE hinzufügte, und ich hoffte, dass ich mit einigen syntaktischen Verbesserungen in der Lage sein würde, die NULLS LETZTE Anfrage zu akzeptieren.

+0

Ein Mitarbeiter stellte mir eine Ausweichlösung zur Verfügung. Sie wissen immer noch nicht, warum die Abfrage NULLS LAST ignoriert, aber ich endete mit diesem als meine Abhilfe up: String sql = "c FROM Kontakt SELECT c WHERE c.partnerCode =: PCode und c.activeFlag = 'Y'" \t \t + "ORDER BY nvl (c.primaryFlag, 'N') DESC, c.letztenName ASC"; Hinweis: Werte für die Spalte waren 'Y', 'N' oder Null. Mit nvl benutze ich 'N' anstelle von null. – headlikearock

+0

Sie sollten dann Ihre eigene Frage beantworten und die Antwort akzeptieren. – sharakan

+0

Danke - ich denke, das war mein erster Beitrag und ich durfte meine eigene Frage zu dieser Zeit nicht beantworten, also fügte ich sie stattdessen als Kommentar hinzu! – headlikearock

Antwort

2

Ein Mitarbeiter stellte mir eine Ausweichlösung zur Verfügung. Sie wissen immer noch nicht, warum die Abfrage NULLS LAST ignoriert, aber ich endete mit diesem als meine Abhilfe up:

String sql = "SELECT c FROM Contact c WHERE c.partnerCode =:pCode and c.activeFlag='Y'"    
+" ORDER BY nvl(c.primaryFlag, 'N') DESC, c.lastName ASC"; 

Anmerkung: Werte für die Spalte waren ‚Y‘, ‚N‘ oder null. Mit nvl benutze ich 'N' anstelle von null.