vil*_*iam 15 java spring hibernate temp-tables bulk-delete
我有个问题.这些方法在哪里?
Dialect.supportsTemporaryTables();
Dialect.generateTemporaryTableName();
Dialect.dropTemporaryTableAfterUse();
Dialect.getDropTemporaryTableString();
Run Code Online (Sandbox Code Playgroud)
我试图浏览git历史记录Dialect.java,但没有运气.我发现有类似的东西
 MultiTableBulkIdStrategy被创建但我找不到任何如何使用它的例子.
到目前为止......我有遗留代码(使用hibernate 4.3.11),它使用临时表从多个表中进行批量删除.在那些表格中可能有1000行,但也可能有10万行.所以只是为了确保我不会用一些疯狂的删除来杀死数据库我创建临时表,我把(使用具有某些条件的选择查询)一次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)但这种方式较慢,因为我必须为每次删除多次运行select查询,而limit在HQL中嵌套选择不支持.
任何想法或指针?
谢谢.
这些方法存在于版本 4.3.11中,但在版本 5.0.0中删除。它们被删除而不是被弃用似乎有点不寻常 - 背景就在这张 Jira 票证上。
引用此:
从长远来看,我认为最好的方法是删除旨在支持以零碎方式提交的表的 Dialect 方法,并使 MultiTableBulkIdStrategy 成为一个完全独立的合约。
这些方法在此提交中被删除。
因此,这似乎getDefaultMultiTableBulkIdStrategy()是这些方法的预期替代品 - 但我并不完全清楚如何替代,因为它目前没有 Javadoc。我猜你可以尝试从源代码中解决这个问题......或者如果所有其他方法都失败了,也许可以尝试联系Steve Ebersole,谁实施了更改?
|   归档时间:  |  
           
  |  
        
|   查看次数:  |  
           737 次  |  
        
|   最近记录:  |