ОБНОВЛЕНО - см ответ в комментарииJPQL Hibernate NULLS ПОСЛЕДНИЙ игнорируется
Я знаю, что CriteriaQuery.orderBy не поддерживает NULLS LAST. Я пытался использовать TypedQuery и заметил, что кажется просто игнорировать все после «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();
Это возвращает мой результат, заказанный первичным descendings флаг, Сначала нули, игнорируйте сортировку по имени.
Если я это сделать:
String sql = "SELECT c FROM Contact c WHERE c.partnerCode =:pCode and c.activeFlag='Y'" +
" ORDER BY c.primaryFlag DESC, c.lastName ASC";
Я получаю начальную и LastName рода, но до сих пор в конечном итоге с нулям первым, потому что это Oracle DB.
Я был в основном удивлен тем, что не было отправлено сообщение об ошибке, когда я добавил NULLS LAST, и я надеялся, что с некоторыми синтаксическими настройками я смогу заставить его принять запрос NULLS LAST.
Сотрудник предоставил мне обходной путь. Все еще не знаю, почему запрос игнорирует NULLS LAST, но в итоге я использовал это как мой способ: Строка sql = "SELECT c FROM Contact c WHERE c.partnerCode =: pCode и c.activeFlag = 'Y'" \t \t + "ORDER BY nvl (c.primaryFlag, 'N') DESC, c.lastName ASC"; Примечание: значения для столбца были «Y», «N» или «null». Используя nvl, я использую 'N' вместо NULL. – headlikearock
Тогда вы должны ответить на свой вопрос и принять ответ. – sharakan
Спасибо - я думаю, что это была моя первая публикация, и в то время мне не разрешали отвечать на свой вопрос, поэтому я добавил ее вместо комментария! – headlikearock