spring.data.jpa.query :Cannot use native queries with dynamic sorting and/or pagination in method

spring.data.jpa.query :Cannot use native queries with dynamic sorting and/or pagination in method

spring data jpa 中原生 sql 查询无法使用分页怎么办?如果把 desc/esc 当参数传到 原生 sql 中也不行(无法识别)

不能使用的分页查询

如果使用的是hql语句查询的话,里面的要查询的字段和where里面的字段都应该是对应的实体类里的属性,

如果使用sql查询数据表的话,里面要查询的字段和where条件里的字段都应该是数据表里的字段,sql语句记得加上   :nativeQuery = true.

例如:@Query(value = "select count(`id`) from cdkey_info ", nativeQuery = true)

但是注意,jqa的query使用原生sql查询的时候不支持排序的,需要在sql里面加上:ORDER BY ?#{#pageable}
--------------------- 
作者:katy的小乖 
来源:CSDN 
原文:https://blog.csdn.net/u010918487/article/details/78341850 
版权声明:本文为博主原创文章,转载请附上博文链接!

Native queries 
The @Query annotation allows to execute native queries by setting the nativeQuery flag to true.

Example 50. Declare a native query at the query method using @Query

public interface UserRepository extends JpaRepository<User, Long> {
  @Query(value = "SELECT * FROM USERS WHERE EMAIL_ADDRESS = ?1", nativeQuery = true)
  User findByEmailAddress(String emailAddress);
  }
1
2
3
4
这是官方给出的使用本地查询的例子,特别说明了目前本地查询并不支持动态排序,但是可以利用本地查询进行分页 
Note, that we currently don’t support execution of dynamic sorting for native queries as we’d have to manipulate the actual query declared and we cannot do this reliably for native SQL. You can however use native queries for pagination by specifying the count query yourself: 
这是官方给出的本地查询的分页形式

当我使用如下语句,会报错

@Query(value = "SELECT o FROM t_d_order o WHERE o.droom_id = ?1 AND DATE_FORMAT(o.create_time,'%Y-%m') = ?2 AND o.order_status IN ?3 ORDER BY o.create_time DESC",nativeQuery = true)
    Page<OrderModel> pageByDroomIdDate(Long droomId, String datetime, List<Integer> orderStatus, Pageable pageable);
1
2
报错信息大致为:

Caused by: org.springframework.data.jpa.repository.query.InvalidJpaQueryMethodException: Cannot use native queries with dynamic sorting and/or pagination in method public abstract org.springframework.data.domain.Page com.crm.restapi.repository.OrderRepository.pageByDroomIdDate(java.lang.Long,java.lang.String,java.util.List,org.springframework.data.domain.Pageable)
1
解决办法如下:

@Query(value = "SELECT o FROM t_d_order o WHERE o.droom_id = ?1 AND DATE_FORMAT(o.create_time,'%Y-%m') = ?2 AND o.order_status IN ?3 ORDER BY ?#{#pageable}",nativeQuery = true)
    Page<OrderModel> pageByDroomIdDate(Long droomId, String datetime, List<Integer> orderStatus, Pageable pageable);

在语句order by之后使用占位符!
--------------------- 
作者:luck-cheng 
来源:CSDN 
原文:https://blog.csdn.net/qq_20032995/article/details/79884093 
版权声明:本文为博主原创文章,转载请附上博文链接!

猜你喜欢

转载自blog.csdn.net/wxb880114/article/details/83501592
今日推荐