有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java Spring数据REST“findBy…”不分类

我有一个SpringBootAPI(使用2.0.5.0版本的SpringBootStarter父版本),我正在使用SpringBootStarter rest包为我的API生成端点。在其中一个存储库中,我有以下方法:

@Repository
public interface RackPositionDao extends JpaRepository<RackPosition, String> {
    List<RackPosition> findByRack(@Param("rack") Rack rack);
}

它在http://{base}/api/v1/rackPositions/findByRack处公开一个端点

如果我那时打电话

http://{base}/api/v1/rackPositions/findByRack?rack={rack url}&sort=positionNumber,asc

在《邮递员》中,返回的列表没有排序positionNumber'是RackPosition实体上的属性

但是,如果我将存储库方法更改为

@Repository
public interface RackPositionDao extends JpaRepository<RackPosition, String> {
    List<RackPosition> findByRackOrderByPositionNumberAsc(@Param("rack") Rack rack);
}

然后打电话

http://{base}/api/v1/rackPositions/findByRackOrderByPositionNumberAsc?rack={rack url}

它很好用。排序参数不起作用有什么原因吗


共 (3) 个答案

  1. # 1 楼答案

    有两种方法可以在Spring数据JPA中对结果进行排序

    1. 使用自定义JPA查询,如下所示

      @Query("Select r from rack order by position_number ASC")

    2. 使用JPA自定义方法(正如您使用的:findByRackOrderByPositionNumberAsc())

    3. 在存储库方法中传递排序对象,如下所示

      List<RackPosition> findByRack(@Param("rack") Rack rack,org.springframework.data.domain.Sort sort);

    并调用下面的方法

    Sort sort = new Sort(new Sort.Order(Direction.ASC, "lastName"));
    Object obj  = repo.findByRack(rackObject, sort);
    
  2. # 2 楼答案

    JpaRepository接口扩展了PagingAndSortingRepository interface

    因此,您可以将端点用作
    http://{base}/api/v1/rackPositions/findbyRackhttp://{base}/api/v1/rackPositions/find-byRack
    避免戴骆驼帽