如何使用Spring Data Rest对数据进行排序不区分大小写?

时间:2016-11-18 07:34:57

标签: java spring rest sorting

我喜欢在我的SortimentRespository中有一个findAll方法,它允许排序和分页,我可以在其中传递一个参数,其中包含当前页面和页面的大小以及我想要排序不区分大小写的列的名称。

请求应如下所示:

http://localhost:8081/x/rest/sortiments?size=20&page=1

http://localhost:8081/x/rest/sortiments?size=20&sort=name,desc&page=1

我在我的存储库中尝试了以下方法

    @Transactional
    public interface SortimentRepository extends JpaRepository<Sortiment,         RootKey>, SortimentRepositoryCustom {
        List<Sortiment> findAll();            
        // Query 1
        Page<Sortiment> findAllIgnoreCase(Pageable pageable);

        // Query 2
        Page<Sortiment> findAllByOrderByNameAscIgnoreCase(Pageable pageable);

        // Query 3
        @Query("select s from Sortiment s order by LOWER(s.name)")
        Page<Sortiment> findAllOrderByNameIgnoreCase(Pageable p);
    }

结果

查询1: 运行时出错:org.springframework.beans.factory.BeanCreationException:创建名称为&#39; sortimentRepository&#39;的init时出错:init方法的调用失败;嵌套异常是org.springframework.data.mapping.PropertyReferenceException:找不到类型Sortiment的属性find!

查询2: org.springframework.beans.factory.BeanCreationException:创建名称为&#39; sortimentRepository&#39;的init时出错:init方法的调用失败;嵌套异常是org.springframework.data.mapping.PropertyReferenceException:找不到类型Sortiment的属性ignoreCase!

查询3: 我甚至无法在链接搜索

下的hal浏览器中看到此方法

有没有人有想法,我怎么能实现不明智的排序?如果我有一些全局的东西,那将是非常好的,因为几个存储库将需要findAll的不区分大小写的方法......

1 个答案:

答案 0 :(得分:0)

首先,确保使用Sortiment

注释@Entity bean

Spring数据遵循Repository方法名称的一些规则(在下面的链接中给出),您需要更改您的查询方法,如下所示:

在服务层:

Pageable pageable = new PageRequest(pageNumber,pageSize,Sort.Direction.ASC,name);

存储库类:

@Transactional
public interface SortimentRepository extends JpaRepository<Sortiment,RootKey>, 
     SortimentRepositoryCustom { 
        Page<Sortiment> findAll(Pageable pageable);
  }

您可以参考here作为示例。