繁体   English   中英

如何在Spring Data中使用Pageable运行运行时生成的查询?

[英]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);

请注意, offsetlimit特定于MySQL和Postgres。 其他数据库产品可能有不同的语法。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM