NullHandling.NULLS_LAST 不工作

Posted

技术标签:

【中文标题】NullHandling.NULLS_LAST 不工作【英文标题】:NullHandling.NULLS_LAST not working 【发布时间】:2016-07-02 07:25:46 【问题描述】:

我正在尝试使用空值添加到列表管理 具有空值的结果必须在最后离开。 在 SQL 查询中以两种不同的方式将选项添加到 Order 类,但没有出现任何内容。 我使用的是Oracle,如果从管理数据库启动的咨询结果默认列在最后。

这是我的代码:

List<Order> orders = new ArrayList<Order>();
orders.add(new Order(Direction.DESC, "points"));

//THIS
orders.add(new Order(Direction.DESC, "person.date", NullHandling.NULLS_LAST));
//OR THIS
orders.add(new Order(Direction.DESC, "person.date").nullsLast());
//NOT WORKING 

orders.add(new Order(Direction.DESC, "id"));
List<Foo> foos = fooRepository.findAll(new Sort(orders));

如何指定 null 结果应该到最后?

【问题讨论】:

【参考方案1】:

我遇到了同样的问题。

List<Sort.Order> orderList = new ArrayList<Sort.Order>();
    orderList.add(new Sort.Order(Sort.Direction.DESC,"landArea",nullHandling.NULLS_LAST));

    Pageable pageable = new PageRequest(0, PAGE_SIZE, new Sort(orderList));
    Page<SearchSvcAttribsEntity> PropertySearchEntityList =
            searchSvcAttribsRepository.findAll(PropertySearchSvcAttribsSpecs.findByCriteria(propertySearchCriteria), pageable)

;

应该生成 sql: order by desc nulls last 但生成: 按 desc 排序(最后去掉空值)

我正在使用这个依赖:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-jpa</artifactId>
    <version>1.3.3.RELEASE</version>
</dependency

【讨论】:

与休眠 5.0.2 相同的问题 我也有同样的问题。找到任何解决方案吗?我正在使用这个依赖 org.springframework.bootspring-boot-starter-data-jpa2.2.4.RELEASE依赖>【参考方案2】:

也许有点晚了,但你可以看看这个 (link)。

在我们的例子中,我们使用 uwolfer 建议的休眠属性 hibernate.order_by.default_null_ordering 解决了这个问题;当我们尝试使用 spring 数据函数时,nulls last 对我们不起作用。

您可以在 Spring (Boot) application.yml 中设置此属性:

spring:
    jpa:
        properties:
            hibernate.order_by.default_null_ordering: last
            # or for first: hibernate.order_by.default_null_ordering: first

【讨论】:

这也会影响其他 api。如果我们只需要一个 api 的解决方案怎么办【参考方案3】:

这是 Spring Data JPA 的一个错误。 See here.

【讨论】:

以上是关于NullHandling.NULLS_LAST 不工作的主要内容,如果未能解决你的问题,请参考以下文章

时光不老我们不散这句话是啥意思 时光不老我们不散这句话解释

C语言 不允许使用不完整的类型

时光不老,我们不散的下一句是啥?

C语言 不允许使用不完整的类型

时光不老,我们不散珍惜友情的说说

时光不老我们不散,天不会不蓝,我不会不在。