JPQL Hibernate NULLS LAST被忽略

时间:2013-04-30 16:08:39

标签: 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();

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

如果我这样做:

      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请求。

1 个答案:

答案 0 :(得分: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"; 

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