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