通过Java ORM批量删除/清除记录
作者:互联网
对 – 我想从数据库中删除(例如)1,000,000条记录.
这需要很长时间 – >交易超时并失败.
所以 – 我分批删除它们说每笔交易25000条记录.
使用MySQL上的limit子句或Oracle上的ROWNUM.
这很棒.
我想以独立于数据库的方式这样做.
并且来自使用JPA / Hibernate的现有Java代码库.
运气不好. JPA Query.setMaxResults和setFirstResult没有
写’查询’的效果(例如删除).选择许多实体
在内存中单独删除它们是非常缓慢和愚蠢我会说.
所以我使用本机查询并管理应用程序代码中的’limit’子句.
把这个子句封装在orm.xml中会很好,但是……
“Hibernate Annotations 3.2不支持使用本机查询进行批量更新/删除.”
– http://opensource.atlassian.com/projects/hibernate/browse/ANN-469
我想这是一个常见的问题.
有人有更好的数据库独立解决方案吗?
解决方法:
我讨厌给出一个非建设性的答案,但ORM并不是真正意义上对数据库进行批量操作.所以看起来你的本机查询可能是这些操作的最佳选择.
您还应该确保更新ORM以反映数据库的新状态,否则您可能会发生一些奇怪的事情.
ORM是将对象映射到数据库的绝佳工具,但它们通常不是通用的数据库接口.
标签:java,jpa,batch-file,purge 来源: https://codeday.me/bug/20190522/1152105.html