对 - 我想从数据库中删除(例如)1,000,000 条记录。这需要很长时间 -> 事务超时并失败。所以 - 我分批删除它们,说每笔交易有 25000 条记录。在 MySQL 上使用 limit 子句或在 Oracle 上使用 ROWNUM。太好了,这很有效。
我想以独立于数据库的方式执行此操作。并且来自使用 JPA/Hibernate 的现有 Java 代码库。
运气不好。JPA Query.setMaxResults 和 setFirstResult 对写入“查询”(例如删除)没有影响。我会说,将许多实体选择到内存中以单独删除它们是非常缓慢和愚蠢的。
所以我使用本机查询并管理应用程序代码中的“限制”子句。将此子句封装在 orm.xml 中会很好,但是……“Hibernate Annotations 3.2 不支持使用本机查询进行批量更新/删除。” - http://opensource.atlassian.com/projects/hibernate/browse/ANN-469。
我想这是一个普遍的问题。有人有更好的数据库独立解决方案吗?