AGGIORNAMENTO - vedi risposta a un commentoJPQL Hibernate NULLS LAST ignorato
Sono consapevole del fatto che CriteriaQuery.orderBy non supporta NULLS LAST. Stavo cercando di utilizzare un TypedQuery e ho notato che sembra ignorare proprio tutto dopo "NULLS LAST" - non genera errori, semplicemente lo ignora:
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();
Questo restituisce il mio risultato in ordine di descendings bandiera primari, prima i null, ignora l'ordinamento sul cognome.
Se faccio questo:
String sql = "SELECT c FROM Contact c WHERE c.partnerCode =:pCode and c.activeFlag='Y'" +
" ORDER BY c.primaryFlag DESC, c.lastName ASC";
ottengo sia ordinamento primario e cognome, ma ancora finire con i null in primo luogo perché si tratta di un DB Oracle.
Sono stato in gran parte sorpreso dal fatto che non è stato generato alcun messaggio di errore quando ho aggiunto NULLS LAST e speravo che con alcune modifiche alla sintassi sarei riuscito a farlo accettare la richiesta NULLS LAST.
Un collaboratore mi ha fornito una soluzione alternativa. Ancora non so perché la query ignora NULLS LAST ma ho finito per utilizzare questo come soluzione: String sql = "SELECT c FROM Contatto c WHERE c.partnerCode =: pCode e c.activeFlag = 'Y'" \t \t + "ORDER BY nvl (c.primaryFlag, 'N') DESC, c.lastName ASC"; Nota: i valori per la colonna erano "Y", "N" o null. Usando nvl sto usando 'N' al posto di null. – headlikearock
Dovresti rispondere alla tua domanda e accettare la risposta. – sharakan
Grazie - Penso che sia stato il mio primo post e non mi è stato permesso di rispondere alla mia domanda in quel momento, quindi l'ho aggiunto come commento, invece! – headlikearock