[英]How can I run a runtime generated query with Pageable in Spring Data?
我有一个运行时生成的JPQL作为一个字符串和一个PageAble对象。 我想使用Pageable运行JPQL查询。 我怎样才能做到这一点?
例如:我想要这样的解决方案,其中包含运行时生成的查询字符串。
@Query("select u from User u")
Page<User> findUsers(Pageable pageable);
尝试1
要使用运行时生成的查询,必须将存储库方法声明为
@Query("?1") Page<User>
findUsers(String query, Pageable pageable)
但是, @Query
是在初始化应用程序上下文时解析的,因此该方法将失败,因为?1
本身不是有效的JPQL表达式。
尝试2
如果您使用
@Query("?1", nativeQuery = true)
上下文将初始化,您将能够将生成的查询传递给方法,但是Pageable
参数将被忽略,因为按原样使用作为方法参数传递的查询。
因此,总之,不,您要查找的内容无法通过Pageable
完成。
尝试3
如果必须在运行时生成查询,则还必须自己执行分页。 使用MySQL作为基础数据库的示例查询:
@Query("select u from user u order by last_name, first_name offset (?1 - 1) * ?2 limit ?2", nativeQuery = true)
Page<User> findUsers(int page, int pageSize);
请注意, offset
和limit
特定于MySQL和Postgres。 其他数据库产品可能有不同的语法。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.