Hibernate:使用 setFirstResult 和 setMaxResult 进行分页

2024-01-29

我正在开发一个使用 Hibernate 作为 ORM 框架的 Java EE 项目。 为了对查询结果进行分页,我使用 .setFirstResult 和 .setMaxResult 方法(Criteria API)。

问题是第一页显示正确,但当我转到第二页时,显示的第一个结果与第一页的最后一个结果相同。

通过将日志记录级别切换为调试,我成功捕获了 Hibernate 构建的 SQL 查询。他们是:

-- First page query (results from 1 to 10)
select * from ( select this_.DT_FINE_VAL as DT1_5_0_, this_.DT_INI_VAL as DT2_5_0_, this_.CD_TIPO_PERIODO as CD3_5_0_, this_.DT_AGGIORNAMENTO as DT4_5_0_, this_.DT_INSERIMENTO as DT5_5_0_, this_.CD_USERID_AGG as CD6_5_0_, this_.CD_USERID_INS as CD7_5_0_ from GPER0_POVS2.T_POVS2_PERIODI_FUNZ this_ order by this_.CD_TIPO_PERIODO desc ) where rownum <= 10;

-- Second page query (results from 11 to 20)
select * from ( select row_.*, rownum rownum_ from ( select this_.DT_FINE_VAL as DT1_5_0_, this_.DT_INI_VAL as DT2_5_0_, this_.CD_TIPO_PERIODO as CD3_5_0_, this_.DT_AGGIORNAMENTO as DT4_5_0_, this_.DT_INSERIMENTO as DT5_5_0_, this_.CD_USERID_AGG as CD6_5_0_, this_.CD_USERID_INS as CD7_5_0_ from GPER0_POVS2.T_POVS2_PERIODI_FUNZ this_ order by this_.CD_TIPO_PERIODO desc ) row_ where rownum <= 20) where rownum_ > 10;

看来第二个查询是“错误的”。 我使用 Oracle 作为 DBMS。 这可能是一个 Hibernate 错误吗?有人能帮我吗?

Thanks.

编辑: 这是代码:

Session currentSession = getCurrentSession();
Criteria criteria = currentSession.createCriteria(PeriodoFunz.class);
criteria.setResultTransformer(Criteria.ROOT_ENTITY);
Order order = paginationInfo.isAsc() ? Order.asc(paginationInfo.getOrderBy()) : Order.desc(paginationInfo.getOrderBy());
criteria.addOrder(order);
....
criteria = criteria.setFirstResult(paginationInfo.getFromRecord()).setMaxResults(paginationInfo.getPageSize());
List<PeriodoFunz> result = criteria.list();

您的订单条件似乎导致 SQL 查询不是stable(以不同的查询顺序返回相同的结果行)。

您可以通过为唯一属性添加二阶标准来规避此问题,例如身份证号码:

Order order = paginationInfo.isAsc() ? Order.asc(paginationInfo.getOrderBy()) : Order.desc(paginationInfo.getOrderBy());
criteria.addOrder(order);
Order orderById = paginationInfo.isAsc() ? Order.asc("id") : Order.desc("id");
criteria.addOrder(orderById);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Hibernate:使用 setFirstResult 和 setMaxResult 进行分页 的相关文章

  • 为什么 i++ 不是原子的?

    Why is i Java 中不是原子的 为了更深入地了解 Java 我尝试计算线程中循环的执行频率 所以我用了一个 private static int total 0 在主课中 我有两个线程 主题 1 打印System out prin
  • Java中反射是如何实现的?

    Java 7 语言规范很早就指出 本规范没有详细描述反射 我只是想知道 反射在Java中是如何实现的 我不是问它是如何使用的 我知道可能没有我正在寻找的具体答案 但任何信息将不胜感激 我在 Stackoverflow 上发现了这个 关于 C
  • 制作一个交互式Windows服务

    我希望我的 Java 应用程序成为交互式 Windows 服务 用户登录时具有 GUI 的 Windows 服务 我搜索了这个 我发现这样做的方法是有两个程序 第一个是服务 第二个是 GUI 程序并使它们进行通信 服务将从 GUI 程序获取
  • JAXb、Hibernate 和 beans

    目前我正在开发一个使用 Spring Web 服务 hibernate 和 JAXb 的项目 1 我已经使用IDE hibernate代码生成 生成了hibernate bean 2 另外 我已经使用maven编译器生成了jaxb bean
  • 列出jshell中所有活动的方法

    是否有任何命令可以打印当前 jshell 会话中所有新创建的方法 类似的东西 list但仅适用于方法 您正在寻找命令 methods all 它会打印所有方法 包括启动 JShell 时添加的方法 以及失败 被覆盖或删除的方法 对于您声明的
  • 我可以使用 HSQLDB 进行 junit 测试克隆 mySQL 数据库吗

    我正在开发一个 spring webflow 项目 我想我可以使用 HSQLDB 而不是 mysql 进行 junit 测试吗 如何将我的 mysql 数据库克隆到 HSQLDB 如果您使用 spring 3 1 或更高版本 您可以使用 s
  • 如何在PreferenceActivity中添加工具栏

    我已经使用首选项创建了应用程序设置 但我注意到 我的 PreferenceActivity 中没有工具栏 如何将工具栏添加到我的 PreferenceActivity 中 My code 我的 pref xml
  • 十进制到八进制的转换[重复]

    这个问题在这里已经有答案了 可能的重复 十进制转换错误 https stackoverflow com questions 13142977 decimal conversion error 我正在为一个类编写一个程序 并且在计算如何将八进
  • 如何为俚语和表情符号构建正则表达式 (regex)

    我需要构建一个正则表达式来匹配俚语 即 lol lmao imo 等 和表情符号 即 P 等 我按照以下示例进行操作http www coderanch com t 497238 java java Regular Expression D
  • Java TestNG 与跨多个测试的数据驱动测试

    我正在电子商务平台中测试一系列商店 每个商店都有一系列属性 我正在考虑对其进行自动化测试 是否有可能有一个数据提供者在整个测试套件中提供数据 而不仅仅是 TestNG 中的测试 我尝试不使用 testNG xml 文件作为机制 因为这些属性
  • getResourceAsStream() 可以找到 jar 文件之外的文件吗?

    我正在开发一个应用程序 该应用程序使用一个加载配置文件的库 InputStream in getClass getResourceAsStream resource 然后我的应用程序打包在一个 jar文件 如果resource是在里面 ja
  • 加密 JBoss 配置中的敏感信息

    JBoss 中的标准数据源配置要求数据库用户的用户名和密码位于 xxx ds xml 文件中 如果我将数据源定义为 c3p0 mbean 我会遇到同样的问题 是否有标准方法来加密用户和密码 保存密钥的好地方是什么 这当然也与 tomcat
  • Java Integer CompareTo() - 为什么使用比较与减法?

    我发现java lang Integer实施compareTo方法如下 public int compareTo Integer anotherInteger int thisVal this value int anotherVal an
  • AWS 无法从 START_OBJECT 中反序列化 java.lang.String 实例

    我创建了一个 Lambda 函数 我想在 API 网关的帮助下通过 URL 访问它 我已经把一切都设置好了 我还创建了一个application jsonAPI Gateway 中的正文映射模板如下所示 input input params
  • 在 Maven 依赖项中指定 jar 和 test-jar 类型

    我有一个名为 commons 的项目 其中包含运行时和测试的常见内容 在主项目中 我添加了公共资源的依赖项
  • Firebase 添加新节点

    如何将这些节点放入用户节点中 并创建另一个节点来存储帖子 我的数据库参考 databaseReference child user getUid setValue userInformations 您需要使用以下代码 databaseRef
  • 有没有办法为Java的字符集名称添加别名

    我收到一个异常 埋藏在第 3 方库中 消息如下 java io UnsupportedEncodingException BIG 5 我认为发生这种情况是因为 Java 没有定义这个名称java nio charset Charset Ch
  • 当我从 Netbeans 创建 Derby 数据库时,它存储在哪里?

    当我从 netbeans 创建 Derby 数据库时 它存储在哪里 如何将它与项目的其余部分合并到一个文件夹中 右键单击Databases gt JavaDB in the Service查看并选择Properties This will
  • 按日期对 RecyclerView 进行排序

    我正在尝试按日期对 RecyclerView 进行排序 但我尝试了太多的事情 我不知道现在该尝试什么 问题就出在这条线上适配器 notifyDataSetChanged 因为如果我不放 不会显示错误 但也不会更新 recyclerview
  • 使用 xpath 和 vtd-xml 以字符串形式获取元素的子节点和文本

    这是我的 XML 的一部分

随机推荐

  • 更改 RMD 摘要的行距?

    是否可以将 YAML 标头中指定的摘要的行距更改为单倍行距 同时将文档的其余部分保留为双倍行距 我的 YAML 如下 output pdf document number sections true title My Title autho
  • 如何在 const 中定义数组?

    我在定义字符串数组时遇到一些问题const在 Inno Setup 的代码部分下 我有以下内容 Code const listvar array 0 4 of string one two three four five 它说我需要一个 哪
  • 如何使用 Android 导航抽屉更改片段

    我知道这些类型的问题已经在这里 但我仍然没有找到这个问题的答案 我创建了一个应用程序并使用了由应用程序 AndroidStudio 自动创建的导航抽屉 这是我所拥有的 Override protected void onCreate Bun
  • 如何从 iPhone 的表格视图中获取所选单元格的单元格值

    我在表视图控制器中显示图像 其中图像从 URL 呈现为 XML 文件 它适用于将图像作为滚动视图列出 现在我想选择一个特定的图像 窗口应该单独显示所选的单元格图像 为此 我需要获取单元格值吗 如果是这样 我如何获取特定的单元格值并在下一个窗
  • Blob createObjectURL 下载在 Firefox 中不起作用(但在调试时有效)

    我有一个奇怪的问题 下面的函数是我根据我在网上找到的有关在客户端中动态创建 Blob 并使用一些二进制数据 作为数组传递 并能够下载该数据创建的函数 这在 Chrome 中工作得很好 但在 Firefox 中没有任何作用 除非我调试并单步执
  • 如何使用 Rust 在用户空间处理 SIGSEGV 信号?

    我试图了解 Rust 中的堆栈溢出处理程序 我已经写了函数recursive stack 它一次又一次地声明一些局部变量以耗尽堆栈空间 extern crate nix use nix sys signal extern C fn hand
  • 使用 CustomAttributes 调用 sagemaker 端点

    我正在尝试调用我的 SageMaker 端点并传递指定的 CustomAttributes 参数here https boto3 amazonaws com v1 documentation api latest reference ser
  • 如何在 Dart 中触发 KeyboardEvent

    正如我在标题中所说 我想在 Dart 中模拟 keyup 事件 问题是我还没有找到如何创建新的 KeyboardEvent 对象 我发现的唯一方法是使用 Event String 类型 构造函数 然后将其分派到窗口对象上 但这不起作用 因为
  • 无法加载从带有标识符的包中的笔尖引用的“”图像

    当我加载我的应用程序时 它会显示一条警告消息 无法加载从捆绑包中的笔尖引用的 图像 标识符 我搜索并确认了我所有的图像 但它仍然显示该警告 在项目导航器中选择您的图像 打开文件检查器 确保您已选择目标
  • 可以使用“ifconfig”块(reStructuredText)有条件地定义目标

    是否可以有条件地定义target https docutils sourceforge io docs ref rst restructuredtext html hyperlink targets在 reStructuredText 文件
  • 前端开发中的“乐观更新”是什么

    我正在读介绍redux pattern https redux js org introduction motivation 并且有以下段落 考虑前端产品中变得普遍的新要求 开发 例如处理乐观更新 渲染 服务器 在执行路由转换之前获取数据等
  • 在 iOS 上引发的 Xamarin.Forms.WebView.Navigating 事件用于内部导航

    假设您希望阻止用户从 Xamarin Forms WebView 导航到外部页面 public App var webView new WebView Source new HtmlWebViewSource Html h1 Hello w
  • 带 firebase 身份验证的拦截器

    我的 Angular 6 拦截器出现问题 我已将代码从 Angular 5 x 迁移到 6 0 和 rxjs 5 x 到 6 x 当我尝试创建新用户帐户时 该请求似乎被调用了两次 我知道这一点是因为我将错误记录到控制台 我注意到当我尝试从
  • 从 XCAsset 目录获取数据

    我知道要从资产目录中获取图像 我可以使用 UIImage named fileName 来执行此操作 但是 如果我从 XCAsset 目录获取数据怎么办 我无法弄清楚这一点 我努力了 let url NSBundle mainBundle
  • 当键盘出现时向上滑动表格

    你好 我正在使用表格进行数据输入 一些文本字段位于表单底部 当我单击文本字段进行书写时 键盘会出现并隐藏其后面的字段 如果我使文本字段成为第一响应者 它会隐藏键盘 但通过这样做我无法做到这一点 我想知道当键盘出现时 整个表单应该以我的最后一
  • 在 Visual Studio Code 中启用错误突出显示

    我最近使用 Visual Studio Code 进行 C 编程 我的代码中有一个错误 但是我希望 VS Code 突出显示它Example https i stack imgur com D1gon png 解决方案实际上非常简单 在此之
  • Java - JTextPane 中的自动缩进

    我正在用 Java 制作一个文本编辑器 除了自动缩进之外 我拥有所需的一切 如果它们转到新行 我如何使缩进保持不变 我的编辑器窗口使用 JTextPane 基本上 如果用户输入新行 我希望新行像前一行一样缩进 这是到目前为止我的缩进代码 注
  • WebLogic 中默认“经过身份验证的角色”的角色名称是什么?如何在我的部署描述符中引用它?

    我正在尝试在 Web 应用程序中实现身份验证机制 并将其部署在 WebLogic 12c 实例上 我想限制只有经过身份验证的用户才能访问某些页面 我的问题是弄清楚如何定义我的安全部分的身份验证约束来执行此操作 这是我的 web xml 的安
  • Swift:错误:“必需”初始化器“init(coder:)”必须由“UIView”的子类提供

    当我在 swift 2 中构建我的应用程序时遇到问题 Xcode 说 required 初始化程序 init coder 必须由 UIView 的子类提供 这是该类的代码 class creerQuestionnaire UIView IB
  • Hibernate:使用 setFirstResult 和 setMaxResult 进行分页

    我正在开发一个使用 Hibernate 作为 ORM 框架的 Java EE 项目 为了对查询结果进行分页 我使用 setFirstResult 和 setMaxResult 方法 Criteria API 问题是第一页显示正确 但当我转到