我有一个问题。这些方法去了哪里?
Dialect.supportsTemporaryTables();
Dialect.generateTemporaryTableName();
Dialect.dropTemporaryTableAfterUse();
Dialect.getDropTemporaryTableString();
我尝试为Dialect.java
浏览git历史记录,但没有运气。我发现像 创建了MultiTableBulkIdStrategy
,但我找不到任何使用它的示例。
要点...我有遗产代码(使用Hibernate 4.3.11),该代码正在从事批处理删除使用临时表的多个表。在这些桌子中可能有1000行,但也可能存在是1000万行。因此,为了确保我不用疯狂的删除杀死DB,我创建了我放置的临时表(使用某些条件的选择查询)1000 ID然后使用此临时表从4个表中删除数据。它在循环中运行,直到所有基于某种条件的数据都没有删除为止。每个周期后进行交易。
要使它更复杂,该代码必须在以下顶部运行:mysql,mariaidb,oracle,postgresql,sqlserver和h2。
它是使用本机SQL完成的,其中包括上述方法。但不是我找不到方法重构。
我的第一次尝试是使用以下嵌套选择来创建查询: delete from TABLE where id in (select id from TABLE where CONDITION limit 1000)
但是这是速度较慢,因为我必须在每个删除中多次运行选择查询,并且在HQL中不支持limit
。
有什么想法或指示?
谢谢。
这些方法在版本4.3.11中存在,但在版本5.0.0中被删除。他们被删除而不是弃用似乎有点不寻常 - 背景是在这张Jira票上。
引用以下方式:
长期,我认为最好的方法是删除方言方法 旨在支撑桌子以零碎的方式表现出来并制作 跨性别的bulkidstrategy是完全独立的合同。
在此提交中删除了该方法。
因此,getDefaultMultiTableBulkIdStrategy()
似乎是这些方法的预期替代品 - 但是我尚不完全清楚如何替代,因为它目前没有Javadoc。猜猜您可以尝试通过源代码来解决它...或者如果所有其他方法都失败了,也许尝试联系史蒂夫·埃伯尔(Steve Ebersole),谁实施了更改?