Spring JPA JPQL 查询

3

我想知道是否可以通过Spring JPA仓库执行JPQL查询,并像使用ExampleSpecification一样使用分页作为排序特性。我希望实现类似下面这样的功能:

findAll(String jpql, Pageable pageable)

声明QueryByExampleExecutor接口:

findAll(Example<S> example, Pageable pageable);

JpaSpecificationExecutor接口声明:

Page<T> findAll(Specification<T> spec, Pageable pageable);
1个回答

0
根据Spring Data文档,即使使用本地查询也应该是可能的。请看第51个示例:
public interface UserRepository extends JpaRepository<User, Long> {

  @Query(value = "SELECT * FROM USERS WHERE LASTNAME = ?1",
    countQuery = "SELECT count(*) FROM USERS WHERE LASTNAME = ?1",
    nativeQuery = true)
  Page<User> findByLastname(String lastname, Pageable pageable);
}

根据文档,排序也是可能的:

public interface UserRepository extends JpaRepository<User, Long> {

  @Query("select u from User u where u.lastname like ?1%")
  List<User> findByAndSort(String lastname, Sort sort);

  @Query("select u.id, LENGTH(u.firstname) as fn_len from User u where u.lastname like ?1%")
  List<Object[]> findByAsArrayAndSort(String lastname, Sort sort);
}

谢谢您的回答,但我想要的是动态创建查询并在代码中调用存储库,而您提供的替代方案需要预先定义查询。 - Juan Rada
现场编写JPQL可能会出现错误。JPQL在运行时编译,但仅在类加载阶段进行编译,因此如果出现错误,则存储库将无法加载。这是一个很好的安全措施。您可以尝试使用Criteria Query代替:https://dev59.com/sl4b5IYBdhLWcg3woS-8 - Alex Roig

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接