spring可分页namedNativeRequesty

2vuwiymt  于 2021-06-30  发布在  Java
关注(0)|答案(1)|浏览(282)

我遇到过这样一个问题,很难找到好的例子,或者这类问题的参考。我正在尝试向已存在的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或文档的技巧都会很有帮助,我似乎找不到很多使用此类查询进行分页的示例。

bfhwhh0e

bfhwhh0e1#

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

相关问题