AKTUALIZACJA - patrz odpowiedź w komentarzuJPQL Hibernate null LAST ignorowane
Jestem świadomy, że CriteriaQuery.orderBy nie obsługuje wartości null ostatni. Starałem się używać TypedQuery i zauważył, że wydaje się, że wszystko po prostu zignorować „null ostatni” - nie rzucać żadnych błędów, po prostu ignoruje go:
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();
ta zwraca mój wynik zamówionego przez pierwotnych descendings flagi, najpierw null, ignoruj sortowanie na nazwisko.
Gdybym to zrobić:
String sql = "SELECT c FROM Contact c WHERE c.partnerCode =:pCode and c.activeFlag='Y'" +
" ORDER BY c.primaryFlag DESC, c.lastName ASC";
uzyskać zarówno podstawową i nazwisko rodzaju, ale nadal skończyć z null pierwsze dlatego, że jest to Oracle DB.
Byłem bardzo zaskoczony, że nie pojawił się komunikat o błędzie, gdy dodałem NULLS OSTATNIE i miałem nadzieję, że dzięki kilku poprawkom składni będę w stanie go zaakceptować na żądanie NULLS LAST.
Współpracownik zapewnił mi obejście. Nadal nie wiem, dlaczego kwerenda ignoruje NULLS OSTATNIE, ale skończyłem używać tego jako mojego obejścia: String sql = "WYBIERZ c Z Kontakt c WHERE c.partnerCode =: pCode i c.activeFlag =" Y "" \t \t + "ORDER BY nvl (cprimaryFlag, 'N') DESC, c.lastName ASC"; Uwaga: wartości dla kolumny to "Y", "N" lub zero. Używając nvl używam 'N' zamiast zerowego. – headlikearock
Powinieneś wtedy odpowiedzieć na własne pytanie i zaakceptować odpowiedź. – sharakan
Dzięki - myślę, że to było moje pierwsze ogłoszenie i nie mogłem w tym czasie odpowiedzieć na moje własne pytanie, więc dodałem je jako komentarz! – headlikearock