gpt4 book ai didi

java - JPQL Hibernate NULLS LAST 被忽略

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:25:08 26 4
gpt4 key购买 nike

已更新 - 请在评论中查看答案

我知道 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 请求。

最佳答案

一位同事为我提供了解决方法。仍然不知道为什么查询忽略 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”或空值。使用 nvl 我使用“N”代替 null。

关于java - JPQL Hibernate NULLS LAST 被忽略,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16304352/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com