小编vil*_*iam的帖子

如何在Hibernate中使用临时表批量删除记录?

我有个问题.这些方法在哪里?

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中嵌套选择不支持.

任何想法或指针?

谢谢.

java spring hibernate temp-tables bulk-delete

15
推荐指数
1
解决办法
737
查看次数

带有DESC顺序的休眠索引

有没有一种方法可以创建一个具有DESC顺序的一列的多列索引?我已经试过了(来自javax.persistence包的注释):

@Table(name = some_table
  indexes = {
    @Index(name = "idx_multi_column", columnList = "column1, column2, column3"),
    @Index(name = "idx_multi_column", columnList = "column1, column2, column3 DESC")
  }
)
Run Code Online (Sandbox Code Playgroud)

但是它使用column3 asc创建两个索引-DESC被忽略。我正在使用:

Hibernate 4.3.10 Hibernate JPA 2.1 API

谢谢。

java indexing hibernate jpa jpa-2.1

5
推荐指数
1
解决办法
687
查看次数

标签 统计

hibernate ×2

java ×2

bulk-delete ×1

indexing ×1

jpa ×1

jpa-2.1 ×1

spring ×1

temp-tables ×1