我遇到过这样一个问题,很难找到好的例子,或者这类问题的参考。我正在尝试向已存在的namedNativeRequesty添加分页。据我所知,您需要为分页提供另一个namedNativeRequesty,并在名称末尾添加.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作为新的pageable(0,1)来测试它。但是任何大于1的数量都会抛出这个异常:org.springframework.orm.jpa.jpasystemexception“无法调用class service.sources.foo构造函数;嵌套异常为org.hibernateexception:无法调用类service.sources.foo构造函数“
任何处理分页namednativequeries或文档的技巧都会很有帮助,我似乎找不到很多使用此类查询进行分页的示例。
1条答案
按热度按时间bfhwhh0e1#
结果证明这种调用可分页@namednativequery的方法是正确的。从数据库返回的一个参数为null,当它应该被分配给原语的类变量时,它被分配给原语。因此,我没有将它赋给integer类型,而是将它赋给int类型,这导致它无法为我的查询找到合适的构造函数。碰巧我在这个例子中尝试的num有一个null变量作为参数,而其他num没有。在修复了用类变量替换原语之后,一切正常。