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

标签 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);
}

我希望能够通过以下方式调用它:
itemRepository.findByStatus(Status.completed, new PageRequest(0, 10, Direction.ASC, "lower(name)")

注意 lower属性字符串中的函数。这不起作用,因为 Spring-data 期望那里有一个属性。这将被翻译成如下内容:
SELECT o FROM Item o WHERE o.status = ?1 ORDER BY o.lower(name)

这当然不起作用,因为对象上没有“较低”属性。

有没有办法使这项工作?

最佳答案

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));

关于spring-data-jpa - 使用 Spring 数据进行不区分大小写的排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15777638/

相关文章:

java - Intellij 不更新 spring.datasource.url

java - 在单独的文件中定义 JPA 实体图

java - JPA 分页查询在每次后续调用中变慢

java - 如何使用 ReactiveMongoTemplate 将 Flux 结果映射到另一种对象类型

启用 Spring AOP [JAVA 11] 后,Spring 数据存储库无法正常工作

hibernate - 如何避免 1 + n 数据库调用在 Hibernate 中进行双向可选的一对一关联?

java - Postgres UTC 到 Java ZonedDateTime

java - 如何在 Spring Boot 中更新单个表列而不更新其余属性?

java - Spring 启动: keywords supported for JPA

spring - javax.persistence.TransactionRequiredException : no transaction is in progress - Spring Batch