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 相同的问题 我也有同样的问题。找到任何解决方案吗?我正在使用这个依赖也许有点晚了,但你可以看看这个 (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 不工作的主要内容,如果未能解决你的问题,请参考以下文章