Java 上次忽略的JPQL Hibernate空值

Java 上次忽略的JPQL Hibernate空值,java,hibernate,jpa,jpql,Java,Hibernate,Jpa,Jpql,更新-见评论中的答案 我知道CriteriaQuery.orderBy最后不支持空值。我试着使用TypedQuery,注意到它似乎忽略了“NULLS LAST”之后的所有内容-不会抛出任何错误,只是忽略了它: String sql = "SELECT c FROM Contact c WHERE c.partnerCode =:pCode and c.activeFlag='Y'" + " ORDER BY c.primaryFlag DESC NULLS LAS

更新-见评论中的答案

我知道CriteriaQuery.orderBy最后不支持空值。我试着使用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();
我得到了primary和lastname排序,但仍然首先得到null,因为它是一个Oracle数据库


我最惊讶的是,当我上次添加null时没有抛出错误消息,我希望通过一些语法调整,我能够让它接受null的最后一个请求

一位同事为我提供了一个解决办法。仍然不知道为什么查询最后会忽略空值,但我最终将此作为解决方法:

 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

一位同事为我提供了一个变通办法。仍然不知道为什么查询最后会忽略空值,但我最终使用它作为解决方法:String sql=“从联系人c中选择c,其中c.partnerCode=:pCode和c.activeFlag='Y'”+“ORDER BY nvl(c.primaryFlag,'N')DESC,c.lastName ASC”;注意:该列的值为“Y”、“N”或null。使用nvl我使用'N'代替null。你应该回答你自己的问题,然后接受答案。谢谢-我想这是我第一次发帖,当时我不允许回答我自己的问题,所以我将其作为评论添加!
 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";