JPQL Hibernate NULLS LAST被忽略

hea*_*ock 9 java hibernate jpa jpql

更新 - 请参阅评论中的答案

我知道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();
Run Code Online (Sandbox Code Playgroud)

这将返回由主标志下降排序的结果,首先返回null,忽略对姓氏的排序.

如果我这样做:

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

我得到主要和姓氏排序,但仍然首先得到空值,因为它是一个Oracle数据库.

我最惊讶的是,当我添加NULLS LAST时没有抛出任何错误消息,我希望通过一些语法调整,我可以让它接受NULLS LAST请求.

hea*_*ock 2

一位同事为我提供了一个解决方法。仍然不知道为什么查询会忽略 NULLS LAST 但我最终使用它作为我的解决方法:

 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"; 
Run Code Online (Sandbox Code Playgroud)

注意:该列的值为“Y”、“N”或 null。使用 nvl 我使用“N”代替 null。