Hibernate 如何在spring boot的JPA查询注释中添加动态sql查询?

Hibernate 如何在spring boot的JPA查询注释中添加动态sql查询?,hibernate,spring-boot,spring-mvc,spring-data-jpa,Hibernate,Spring Boot,Spring Mvc,Spring Data Jpa,我想在运行时在查询中添加一个排序列。我已经将查询注释用于生成查询。我已经使用param“sortCol”在查询中添加了一个排序列。但不知何故,查询注释无法识别“sortCol”parma,因此无法使用它。也没有给出任何错误 SELECT * FROM request r WHERE r.asset_type IN ( ?, ?, ? ) AND r.request_ty

我想在运行时在查询中添加一个排序列。我已经将查询注释用于生成查询。我已经使用param“sortCol”在查询中添加了一个排序列。但不知何故,查询注释无法识别“sortCol”parma,因此无法使用它。也没有给出任何错误

 SELECT
        * 
    FROM
        request r 
    WHERE
        r.asset_type IN (
            ?, ?, ?
        ) 
        AND r.request_type IN (
            ?, ?
        ) 
        AND r.status IN  (
            ?, ?, ?, ?
        ) 
        AND r.assign_to = ?  
        AND (
            r.request_custom_id LIKE ? 
            OR r.project_name LIKE ? 
            OR r.asset_type LIKE ? 
            OR r.request_type LIKE ? 
        ) 
    ORDER BY
        ? limit ?"
在本文中,缺少order by列名,这是我添加的。在运行时:

    @Query(value ="SELECT * FROM request r WHERE r.asset_type IN (:assetType) AND r.request_type IN (:requestType) AND r.status IN  (:statusList) AND r.assign_to = :assignTo  AND ( r.request_custom_id LIKE %:searchTerm% OR r.project_name LIKE %:searchTerm1% OR r.asset_type LIKE %:searchTerm2% OR r.request_type LIKE %:searchTerm3% ) ORDER BY :sort",nativeQuery = true)
    Page<Request> findRequestdata(Pageable pageable,
            @Param("assetType") List<String> assetType,
            @Param("requestType") List<String> requestType,
            @Param("statusList") List<Integer> statusList,
            @Param("assignTo") Long assignTo,
            @Param("searchTerm") String searchTerm,
            @Param("searchTerm1") String searchTerm1,
            @Param("searchTerm2") String searchTerm2,
            @Param("searchTerm3") String searchTerm3,
            @Param("sort") String sortCol);
@Query(value=“SELECT*FROM request r其中r.asset\u输入(:assetType)和r.request\u输入(:requestType)和r.status输入(:statusList)和r.assign\u to=:assignTo和(r.request\u自定义\u id像%:searchTerm%或r.project\u名称像%:searchTerm1%或r.asset\u类型像%:searchTerm2%或r.request\u像%:searchTerm3%)排序依据:排序“,nativeQuery=true)
PageFindRequestData(可分页、可分页、,
@参数(“资产类型”)列表资产类型,
@参数(“请求类型”)列表请求类型,
@参数(“状态列表”)列表状态列表,
@参数(“转让对象”)长期转让对象,
@Param(“searchTerm”)字符串searchTerm,
@参数(“searchTerm1”)字符串searchTerm1,
@参数(“searchTerm2”)字符串searchTerm2,
@参数(“searchTerm3”)字符串searchTerm3,
@参数(“排序”)字符串sortCol);
除“sortCol”外,所有parma均设置正确。
请指出我遗漏了什么。

您已经将可分页对象传递给您的方法

因此,在创建分页时,还可以添加排序:

Pageable sortedByName = PageRequest.of(0, 3, Sort.by("name"));

findRequestdata(sortedByName, ...)

请阅读此处的详细信息:

您已经将可分页对象传递给您的方法

因此,在创建分页时,还可以添加排序:

Pageable sortedByName = PageRequest.of(0, 3, Sort.by("name"));

findRequestdata(sortedByName, ...)

请在此处阅读更多信息:

太好了!你能接受我的正确答案吗?谢谢,太好了!你能接受我的正确答案吗?非常感谢。