0
我有一个运行时生成的JPQL作为一个字符串和一个PageAble对象。我想用Pageable运行JPQL查询。我怎样才能做到这一点?如何在Spring数据中使用Pageable运行生成的运行时查询?
例如:我想要一个这样的解决方案与运行时生成的查询字符串。
@Query("select u from User u")
Page<User> findUsers(Pageable pageable);
我有一个运行时生成的JPQL作为一个字符串和一个PageAble对象。我想用Pageable运行JPQL查询。我怎样才能做到这一点?如何在Spring数据中使用Pageable运行生成的运行时查询?
例如:我想要一个这样的解决方案与运行时生成的查询字符串。
@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。其他数据库产品可能有不同的语法。
所以你需要创建库界面,使 @Repository 公共接口UserRepository扩展JpaRepository { @Query 页 findUsers(可分页分页)( “从用户U选择U”); }检查此链接https://www.petrikainulainen.net/programming/spring-framework/spring-data-jpa-tutorial-part-seven-pagination/ –
我相信这是不可能的。弹簧数据内置机制都与模型类型(又名用户)绑定。 – alexbt