使用spring数据进行不区分大小写的排序

Ste*_*tef 9 spring-data-jpa

如何使用Spring-data Pageable进行不区分大小写的排序?

我在我的存储库中有这个方法

public interface ItemRepository extends QueryDslPredicateExecutor<Item>{
    @Query("SELECT o FROM Item o WHERE o.status = ?1")
    Page<Item> findByStatus(Item.Status status, Pageable pageable);
}
Run Code Online (Sandbox Code Playgroud)

我希望能够通过以下方式调用:

itemRepository.findByStatus(Status.completed, new PageRequest(0, 10, Direction.ASC, "lower(name)")
Run Code Online (Sandbox Code Playgroud)

请注意lower属性字符串中的函数.这不起作用,因为Spring-data期望那里有一个属性.这将被翻译成如下:

SELECT o FROM Item o WHERE o.status = ?1 ORDER BY o.lower(name)
Run Code Online (Sandbox Code Playgroud)

这当然不会起作用,因为对象上没有"低级"属性.

有没有办法让这项工作?

Grz*_*lak 17

Sort.Order.ignoreCase() 大约8个月前介绍到spring-data-jpa,看看这里:

https://jira.springsource.org/browse/DATAJPA-296

https://github.com/kraymondksc/spring-data-jpa/commit/c3adce0bd36799d3754a5f4c61aee64982abd7e0

一旦你有一个合适的spring-data-jpa版本(我想从1.4 M1开始,我有1.4.1),你可以这样写:

Sort.Order order = new Sort.Order(Sort.Direction.ASC, "name").ignoreCase();
itemRepository.findByStatus(Status.completed, new PageRequest(0, 10, new Sort(order));
Run Code Online (Sandbox Code Playgroud)

  • ``new Sort(order)`` 构造函数已弃用,使用这个 ``new PageRequest(0, 10, Sort.by(order))`` (2认同)