2016-09-07 22 views
0

我有一个运行时生成的JPQL作为一个字符串和一个PageAble对象。我想用Pageable运行JPQL查询。我怎样才能做到这一点?如何在Spring数据中使用Pageable运行生成的运行时查询?

例如:我想要一个这样的解决方案与运行时生成的查询字符串。

@Query("select u from User u") 
Page<User> findUsers(Pageable pageable); 
+0

所以你需要创建库界面,使 @Repository 公共接口UserRepository扩展JpaRepository { @Query 页 findUsers(可分页分页)( “从用户U选择U”); }检查此链接https://www.petrikainulainen.net/programming/spring-framework/spring-data-jpa-tutorial-part-seven-pagination/ –

+0

我相信这是不可能的。弹簧数据内置机制都与模型类型(又名用户)绑定。 – alexbt

回答

0

尝试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。其他数据库产品可能有不同的语法。

相关问题