gpt4 book ai didi

java - Hibernate 分页查询使用 DB2/400 方言不返回任何记录

转载 作者:太空宇宙 更新时间:2023-11-04 09:18:45 25 4
gpt4 key购买 nike

我将 Vaadin Flow 与 Spring-data-jpa 和 Hibernate 以及 DB2/400 方言一起使用。我正在尝试使用分页查询,因为我的数据集可能非常大。我登录了 Hibernate,以便可以看到 Hibernate 正在执行的语句。它适用于第一页,因为 Hibernate 查询只要求前 50 条记录。然而,对于第二页,它要求 100 条记录并过滤掉前 50 条,但查询不返回任何结果。 Hibernate 生成的查询的一个稍微简化的版本是:

select * from (
select inner2_.*, rownumber() over(order by order of inner2_) as rownumber_ from (
select * from flxalll1 flxalll1x0_ where upper(flxalll1x0_.aoukey) like upper('%te%') fetch first 100 rows only
) as inner2_
) as inner1_ where rownumber_ > 50 order by rownumber_;

我自己使用 IBMi Run SQL Script 工具运行了此程序,但未返回任何结果。但是,如果我只进行内部两个选择:

select inner2_.*, rownumber() over(order by order of inner2_) as rownumber_ from ( 
select * from flxalll1 flxalll1x0_ where upper(flxalll1x0_.aoukey) like upper('%te%') fetch first 100 rows only
) as inner2_ ;

我得到了预期的结果列表,当然是所有的结果,而不仅仅是最后 50 个。我做了更多的实验,发现(毫不奇怪)这是有效的:

select * from ( 
select * from flxalll1
);

因为它列出了所有记录,但是:

select * from ( 
select * from (
select * from flxalll1
)
);

不产生任何记录。

显然这是没有意义的,但我想知道 DB2/400 是否存在问题,因为它不会执行带有两个嵌套子选择的选择或类似的操作,这就是我的原始查询不返回任何记录的原因吗?

解决问题可能很棘手,但至少现在我只是想找出问题所在。

最佳答案

我现在已经解决了我的问题,方法是不使用上面评论中提到的(IBMi)逻辑,而是允许 spring data jpa 执行 UNION。我为 10 个表创建了一个抽象父类(super class),并更改了它们的 Java 类声明来扩展它。

我感谢这篇文章和 Patrice Blanchardie 的回答:

Union tables with spring data jpa

关于java - Hibernate 分页查询使用 DB2/400 方言不返回任何记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58624972/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com