当前位置: 首页 > 知识库问答 >
问题:

Spring可分页NamedNativeQuery

乌甫
2023-03-14

我遇到了一个问题,很难找到好的示例或此类问题的参考。我正在尝试将分页添加到我已经存在的NamedNativeQuery。据我所知,您需要提供另一个NamedNativeQuery用于在名称末尾添加. count的分页。

我当前的查询如下所示:

@NamedNativeQuery(
    name="Foo.getObj",
    resultSetMapping="obj",
    query="SELECT item1, item2, item3, ... 
        FROM Table1 t1 Join Table2 t2 On t1.id = t2.id ...
        WHERE t1.num = :num" 
)

这是我尝试的分页查询:

@NamedNativeQuery(
    name="Foo.getObj.count",
    resultSetMapping="obj",
    query="SELECT COUNT(item1, item2, item3, ...) 
        FROM Table1 t1 Join Table2 t2 On t1.id = t2.id ...
        WHERE t1.num = :num" 
)

我的来电者是这样的:

@Query(nativeQuery=true)
public List<Foo>retrieveFoo(ServiceRequest req){
    return repo.retrieveFoo(@Param("num") foo.getNum(), PageRequest.of(0, req.pages)); //req.pages is never less than 1
}

我对Spring、JPA和Hibernate仍然很陌生,但我仅限于以这种方式或类似的方式实现它。我可以使用Pagable作为new Pagable(0,1)来测试它。但是任何大于1的量都会抛出这个异常:org.springframework.orm.jpa.JpaSystemException“无法调用类service.sources.Foo构造函数;嵌套异常org.HibernateException:无法调用类service.sources.Foo构造函数”

任何处理分页命名请求或文档的技巧都会很有帮助,我似乎找不到很多使用此类查询进行分页的示例。

共有1个答案

公冶鸣
2023-03-14

事实证明,这种调用可分页@NamedNaviQuery的方法是正确的。从数据库返回的一个参数为null,并在原语本应属于其类变量时被分配给原语。因此,我没有将其分配给Integer类型,而是将其分配到int类型。这导致它无法为我的查询找到合适的构造函数。碰巧的是,我在本例中尝试的num具有该参数的null变量,而其他num没有。在修复并用类变量替换原语后,一切正常。

 类似资料:
  • 问题内容: 如何使用和在一起? personelRepository.java personelService.java personelController.java 当我运行它时,会出现这样的错误。但是,如果我像findAll(Pageable page)和findAll(Specification filter)一样分别调用findAll()函数,它将起作用。但是我不能一起使用。 问题答案:

  • 好吧,这很烦人,我真的不知道该怎么解决,所以事情是这样的。 获得了一个返回分页数据的应用程序,如下所示: 检索结果需要花费很长时间。 但是,如果我调用like(使用上面安装的相同可分页对象): 并且存储库上有: 而且,结果马上就会出现。 我假设,对于第一种永远需要的情况,Spring首先检索所有数据(不限制行),然后返回一个带有结果数量信息的页面。 不知道是否与注释有关。 我使用的是2.3.0。顺

  • 问题内容: 我有一个@Entity叫做User。它具有一组变更集,如下所示: 我有一个用户库: 和一个ChangesetRepository: 调用GET 或产生分页响应。 如果我调用GET,那么我将所有结果存储在一个数组中,并且不会发生分页。 有没有办法向Spring Data Rest指示我想通过其父User访问它时以一种可分页的方式返回变更集集​​合?变更集集将快速增长,我宁愿不要在单个页面

  • 我正在考虑将我们传统的jpa/道解决方案迁移到Spring Data。 但是,我们的前端之一是SmartGWT,它们的数据库组件仅使用限制/偏移逐步加载数据,这使得难以使用Pagable。 这会导致问题,因为无法确定限制/偏移量最终是否可以转换为页码。(这可能因用户滚动方式、屏幕大小等而异)。 我查看了切片等,但无法找到在任何地方使用限制/偏移值的方法。 想知道有没有人有什么建议?最理想的情况是,

  • 和ChangeSetRepository: 在或上调用GET会产生分页响应。 如果我在上调用GET,那么我将在单个数组中获得所有结果,并且不会发生分页。 我保留了双向关系,但也能够通过在变更集上使用对用户隐藏到变更集的链接。 侧注:将关系设置为exported=false似乎隐藏了链接,但实际上并没有删除映射。/users/1/changesets没有广告,但它仍然有效。

  • 我有一个简单的JpaRepository和一个finder,它返回按名为“number”的属性降序排列的记录。“number”属性也是我的实体的@Id。这很好,但是有数千条记录,所以我想返回一个页面而不是列表。 如果我将查找器更改为以下内容,则排序不再起作用。我尝试过使用可分页参数的排序功能,但不起作用。还删除了OrderByNumberDesc,但结果相同。 EDIT-添加控制器方法 以下是我的