【问题标题】:Spring Data JPA: case insensitive orderBySpring Data JPA:不区分大小写的 orderBy
【发布时间】:2017-03-27 10:24:59
【问题描述】:

我想按 name 属性对我的实体进行排序,并忽略大小写。

我创建了一个扩展 Spring Data 的 Repository 接口的 EntityRepository。然后我声明了以下 find 方法:

List<Entity> findByNameOrderByNameIgnoreCaseAsc(String name);

但我收到此错误“找不到类型的属性 ignoreCase”。

我在Spring Data JPA documentation 中找不到对此案例的任何引用。

我使用的是 spring-data-jpa 版本 1.11.0。

【问题讨论】:

  • 试试findByNameOrderByNameAscIgnoreCase(String name) (reference)
  • 不起作用:“找不到属性 ignoreCase”。
  • 您使用什么版本的 spring-data-jpa?您的存储库类扩展了什么?您没有在问题中提供足够的信息。
  • 当您按名称过滤而不忽略大小写时,按名称排序忽略大小写有什么意义?

标签: java spring spring-data-jpa


【解决方案1】:

如果您只想返回所有按名称排序并忽略大小写的实体,您可以使用:

repository.findAll(Sort.by(Sort.Order.asc("name").ignoreCase()));

【讨论】:

  • 这很好,因为您存储库中的任何其他方法都可以接收Sort sort 参数,并且您可以在其上使用完全相同的解决方案。谢谢!
【解决方案2】:

Spring DataIgnoreCase只能用于按属性查找,不能与Order by结合使用。

但是,您可以使用 Sort.Order.ignoreCase() 和 Pages http://docs.spring.io/spring-data/commons/docs/current/api/org/springframework/data/domain/Sort.Order.html#ignoreCase-- 获得结果

【讨论】:

    【解决方案3】:

    尝试在下面创建存储库方法(注意添加的排序参数)

    List<Entity> findByName(String name, Sort sort);
    

    然后在此存储库中扩展 PagingAndSortingRepository(无论您的实体 id 类型是什么,都可以使用 Long):

    extends PagingAndSortingRepository<Entity, Long>
    

    然后这样调用方法:

    repository.findByName("nameToFind", Sort.by(Sort.Order.asc("name").ignoreCase()));
    

    【讨论】:

      【解决方案4】:

      你的方法应该是这样的。

      List<Entity> findByNameIgnoreCaseOrderByNameAsc(String name);
      

      请参考https://docs.spring.io/spring-data/jpa/docs/current/reference/html/#repositories.query-methods.query-creation

      【讨论】:

      • 我想按名称订购,忽略名称的大小写。您的方法使用名称匹配实体并忽略大小写。
      猜你喜欢
      • 2017-06-04
      • 1970-01-01
      • 1970-01-01
      • 2014-06-18
      • 1970-01-01
      • 2020-06-20
      • 2019-07-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多