9
已更新 - 请参阅回答评论JPQL Hibernate NULLS LAST被忽略
我知道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";
我得到初级和姓氏排序,但还是落得空第一,因为它是一个Oracle数据库。
当我添加NULLS LAST时,我大多惊讶地发现没有错误消息,并且我希望通过一些语法调整,我可以让它接受NULLS LAST请求。
一位同事为我提供了一种解决方法。仍然不知道为什么查询忽略NULLS LAST,但我最终使用这个作为我的解决方法: String sql =“SELECT c FROM Contact c WHERE c.partnerCode =:pCode and c.activeFlag ='Y'” \t \t +“ORDER BY nvl(c.primaryFlag,'N')DESC,c.lastName ASC”; 注意:该列的值为'Y','N'或null。使用nvl我使用'N'来代替null。 – headlikearock 2013-04-30 16:51:36
然后你应该回答你自己的问题,并接受答案。 – sharakan 2013-06-07 17:05:41
谢谢 - 我认为那是我的第一篇文章,当时我没有被允许回答我自己的问题,所以我将它添加为评论,而不是! – headlikearock 2013-06-07 20:40:12