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}
它很好用。排序参数不起作用有什么原因吗
# 1 楼答案
有两种方法可以在Spring数据JPA中对结果进行排序
使用自定义JPA查询,如下所示
@Query("Select r from rack order by position_number ASC")
使用JPA自定义方法(正如您使用的:
findByRackOrderByPositionNumberAsc
())在存储库方法中传递排序对象,如下所示
List<RackPosition> findByRack(@Param("rack") Rack rack,org.springframework.data.domain.Sort sort);
并调用下面的方法
# 2 楼答案
JpaRepository接口扩展了PagingAndSortingRepository interface
因此,您可以将端点用作
http://{base}/api/v1/rackPositions/findbyRack
或http://{base}/api/v1/rackPositions/find-byRack
避免戴骆驼帽
# 3 楼答案
请遵循以下步骤: https://docs.spring.io/spring-data/jpa/docs/current/api/org/springframework/data/jpa/repository/JpaRepository.html