spring data jpa @query 和 pageable

新手上路,请多包涵

我正在使用 Spring Data JPA,当我使用 @Query 来定义一个 没有 Pageable 的查询时,它有效:

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

但是如果我添加第二个参数 Pageable@Query 将不起作用,Spring 将解析方法的名称,然后抛出 异常 No 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);
}

原文由 Awakening 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 757
2 个回答

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

 select * from internal_uddi where urn like

你应该改为:

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

原文由 Steve 发布,翻译遵循 CC BY-SA 3.0 许可协议

您可以将分页与本机查询一起使用。它记录在这里: Spring Data JPA - Reference Documentation

“ _但是,您可以通过自己指定计数查询来使用本机查询进行分页:示例 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);
}

原文由 RemusS 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题