java - 从 PostgreSql DB 中逐条获取记录

标签 java hibernate postgresql

有一个数据库包含大约 300-400 条记录。我可以进行一个简单的查询来获取 30 条记录,例如:

SELECT * FROM table
WHERE isValidated = false
LIMIT 30

关于数据库表内容的更多说明。有一个名为 isValidated 的列,它可以(正如您正确猜测的那样)采用两个值之一:true 或 false。查询后,应验证某些记录 (isValidated=true)。每组 30 条记录中大约有 5-6 条记录。相应地,在每个查询之后,我将从上一个查询中获取记录(isValidated=false)。事实上,我永远不会用这种方法到达表的末尾。

验证过程是用Java + Hibernate 完成的。我是 Hibernate 新手,所以我使用 Criterion 来进行这个简单的查询。

此类任务有最佳实践吗?添加标志字段(标记已获取的记录)的变体是不合适的(对此数据库进行过度设计)。 也许有机会创建一些虚拟表,其中将存储已处理的记录或类似的内容。顺便说一句,在处理完所有记录后,计划再次开始处理它们(有可能其中一些记录需要验证)。

感谢您提前提供的帮助。

最佳答案

我可以想象几种解决方案:

  1. 将所有内容存储在内存中。您只有 400 条记录,考虑到这个数字,这可能是一个完美的解决方案
  2. 在唯一列(例如 PK)上使用 order by 子句(无论如何您都应该这样做),存储最后加载的记录的 ID,并确保下一个查询使用 where ID > :最后ID

关于java - 从 PostgreSql DB 中逐条获取记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10659142/

相关文章:

java - o.h.engine.jdbc.spi.SqlExceptionHelper : ORA-00917: missing comma

java - @Transactional 方法测试失败 :Concurrent update in table "WORK": another transaction has updated or deleted the same row

java - Hibernate 和 postgresql bigserial - 非顺序

postgresql - Azure Powershell - 重命名 Database for PostgreSQL Server 实例

java - BCrypt:有没有办法在数据库中插入已经加密的密码?

java - 为什么在每一行 JavaDoc 上都有星号前缀?

java - 如何从文本中检测编程语言的错误消息?

java - 方法中的多个 Try/Catch block 是否应该组合

java - JPA 在没有直接关系的实体之间分配数据

java - 无法更新 PostgreSQL 表中的字段