【发布时间】:2020-12-22 00:22:59
【问题描述】:
我遇到了一个问题,很难找到好的示例或此类问题的参考。我正在尝试将分页添加到我已经存在的 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 还很陌生,但我仅限于以这种方式实现它,或者在某种程度上类似于这种方式。 我可以使用新的 Pageable(0, 1) 来测试它。但任何大于 1 的数量都会引发此异常: org.springframework.orm.jpa.JpaSystemException "无法调用类 service.sources.Foo 构造函数;嵌套异常是 org.HibernateException: 无法调用类 service.sources.Foo 构造函数"
任何处理分页 NamedNativeQueries 或文档的技巧都会有所帮助,我似乎找不到很多使用此类查询进行分页的示例。
【问题讨论】: