java - 通过 Java ORM 批量删除/清除记录

标签 java batch-file jpa purge

对 - 我想从数据库中删除(例如)1,000,000 条记录。 这需要很长时间->事务超时并失败。 所以 - 我分批删除它们说每笔交易 25000 条记录。 在 MySQL 上使用 limit 子句或在 Oracle 上使用 ROWNUM。 太棒了。

我想以独立于数据库的方式执行此操作。 并且来自使用 JPA/Hibernate 的现有 Java 代码库。

运气不好。 JPA Query.setMaxResults 和 setFirstResult 没有 写“查询”的效果(例如删除)。选择多个实体 将它们单独删除到内存中是非常缓慢和愚蠢的。

所以我使用 native 查询并管理应用程序代码中的“限制”子句。 最好将此子句封装在 orm.xml 中,但是...... “Hibernate Annotations 3.2 不支持使用 native 查询进行批量更新/删除。” - http://opensource.atlassian.com/projects/hibernate/browse/ANN-469 .

我认为这是一个常见问题。 有人有更好的独立于数据库的解决方案吗?

最佳答案

我不想给出一个非建设性的答案,但 ORM 并不是真正用于对数据库进行批量操作。所以看起来你的 native 查询可能是这些操作的最佳选择。

您还应该确保您的 ORM 已更新以反射(reflect)数据库的新状态,否则您可能会发生一些奇怪的事情。

ORM 是将对象映射到数据库的绝佳工具,但它们通常不是通用数据库接口(interface)。

关于java - 通过 Java ORM 批量删除/清除记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/527945/

相关文章:

Java错误消息 "... has private access in ..."

windows - 如何在 Windows 批处理文件中为图像序列构建 printf 样式的字符串?

batch-file - 如何在批处理文件中将 var 指定为其他 var 的一部分

java - Jpa 对象中具有不同的参数

java - 领域驱动设计中的 JPA 实体责任

java - 我的代码是线程安全的吗?如果没有的话如何实现线程安全?

java - 如何在 Java 1.4 中将同步方法转换为异步方法

java - Spring MVC - 将日期从用户时区转换为 UTC

c# - 进程类 db2cmd c#

java - JPA 如何从 OneToMany 关系中的对象的 Arraylist 获取属性