弹簧数据 jpa @query和可分页

2022-08-31 10:38:49

我正在使用Spring Data JPA,当我用来定义一个没有的查询时,它的工作原理是:@QueryPageable

public interface UrnMappingRepository extends JpaRepository<UrnMapping, Long> {
    @Query(value = "select * from internal_uddi where urn like %?1% or contact like %?1%", 
           nativeQuery = true)
    List<UrnMapping> fullTextSearch(String text);
}

但是如果我添加第二个参数,则不会起作用,并且Spring将解析方法的名称,然后抛出异常。这是一个错误吗?Pageable@QueryNo property full found

public interface UrnMappingRepository extends JpaRepository<UrnMapping, Long> {
    @Query(value = "select * from internal_uddi where urn like %?1% or contact like %?1%",
           nativeQuery = true)
    Page<UrnMapping> fullTextSearch(String text, Pageable pageable);
}

答案 1

可以将分页用于本机查询。记录在这里: 春季数据 JPA - 参考文档

"但是,您可以通过自己指定计数查询来使用本机查询进行分页:示例 59。使用@Query在查询方法中声明用于分页的本机计数查询"

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);
}

答案 2

在Spring论坛上提出了类似的问题,其中指出,要应用分页,必须派生第二个子查询。由于子查询引用的字段相同,因此需要确保查询对它所引用的实体/表使用别名。这意味着你在哪里写道:

select * from internal_uddi where urn like

相反,您应该拥有:

select * from internal_uddi iu where iu.urn like ...

推荐