gpt4 book ai didi

java - 如何强制 Hibernate 对开始分页的同一数据集进行分页?

转载 作者:行者123 更新时间:2023-12-01 12:32:06 27 4
gpt4 key购买 nike

假设我的 article 数据库表中有 5 个元素:

+----+------+
| id | name |
+----+------+
| 1 | bb |
| 2 | cc |
| 3 | dd |
| 4 | ee |
| 5 | ff |
+----+------+

如果我想使用 2 元素页面对结果进行分页,我将使用以下查询:

Query query = session.createQuery("from Article order by name asc");
query.setFirstResult(pageNumber);
query.setMaxResults(2);

我读了第一页:

1/bb
2/cc

在我阅读第二页之前,另一个线程在表中插入一个新元素6/aa(按名称排序):

+----+------+
| id | name |
+----+------+
| 6 | aa |
| 1 | bb |
| 2 | cc |
| 3 | dd |
| 4 | ee |
| 5 | ff |
+----+------+

如果我读第二页,我会:

2/cc
3/dd

2/cc 元素将被读取两次:重复。

有什么方法可以强制 Hibernate 对开始分页的同一数据集进行分页吗?

PS:如果第二个线程执行更新查询(例如更改元素的名称,从而更改排序结果),也可能会出现这种情况,我想避免这种情况以及。哦,我不是在寻找 if-already-read-then-remove-and-add-others-until-page-is-full 解决方案 ;)

最佳答案

我看到的第一个解决方案是获取轻量级 header 记录(id、标题等)并存储在用户上下文中。然后根据内存中的用户上下文创建分页。例如,此类上下文可以保存在 http session 中。

第二个解决方案是记住用户开始浏览/搜索时的时间戳,并在 HQL 中附加附加条件:where createdDate <= :timestamp。

也许这会有帮助。

关于java - 如何强制 Hibernate 对开始分页的同一数据集进行分页?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25856238/

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