已更新 - 请参阅评论中的答案
我知道 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();
这将返回按主标志降序排序的结果,首先是空值,忽略姓氏排序。
如果我这样做:
String sql = "SELECT c FROM Contact c WHERE c.partnerCode =:pCode and c.activeFlag='Y'" +
" ORDER BY c.primaryFlag DESC, c.lastName ASC";
我得到了主要和姓氏排序,但仍然首先得到空值,因为它是一个 Oracle 数据库。
当我添加 NULLS LAST 时没有抛出错误消息,我感到非常惊讶,我希望通过一些语法调整,我能够让它接受 NULLS LAST 请求。