对 - 我想从数据库中删除(例如)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/