如何在休眠中使用临时表批量删除记录?
我有一个问题。这些方法去哪儿了?
Dialect.supportsTemporaryTables();
Dialect.generateTemporaryTableName();
Dialect.dropTemporaryTableAfterUse();
Dialect.getDropTemporaryTableString();
我试图浏览git历史记录,但没有运气。我发现创建了类似的东西,但我找不到任何如何使用它的例子。Dialect.java
MultiTableBulkIdStrategy
切中要害...我有遗留代码(使用hibernate 4.3.11),它使用临时表从多个表中进行批量删除。在这些表中,可能有 1000 行,但也可能有 1000 万行。因此,为了确保我不会通过一些疯狂的删除来杀死DB,我创建了临时表,其中我一次放置(使用具有某些条件的选择查询)1000个ID,然后使用此临时表从4个表中删除数据。它在循环时运行,直到基于某些条件的所有数据都未被删除。事务在每个周期后提交。
为了使它更加复杂,这段代码必须在以下代码上运行:mysql,mariadb,oracle,postgresql,sqlserver和h2。
它是使用上面提到的方法使用本机SQL完成的。但不是我找不到如何重构它的方法。
我的第一次尝试是像这样使用嵌套选择创建查询:但这要慢得多,因为我必须为每次删除多次运行选择查询,并且在HQL中的嵌套选择中不受支持。delete from TABLE where id in (select id from TABLE where CONDITION limit 1000)
limit
任何想法或指针?
谢谢。