部分数据使用Java SQL Hibernate删除

时间:2014-09-19 14:18:24

标签: java sql spring hibernate db2

我们的Java程序必须从DB2表中删除大量记录,但它已用完了事务日志。

我们正在努力增加日志空间,但由于内部流程和其他因素......需要一周+才能完成。

我们正在寻找一种暂时删除一些记录而不是全部删除的方法。例如,当我们要删除1000条记录时,我们希望程序一次删除50条记录,然后执行提交并继续执行下一条50,直到删除所有1000条记录。如果删除X个记录后删除失败,则仍然可以。

我们正在使用Hibernate。

请求您就如何实现这一建议提出建议。即使在成功的sql执行场景中,我正在查看java中的sqlstate和sqlcode,但是我的不好,我找不到方法。

如此,循环执行... while(检查sqlcode表示完成不正确)

我们无法从后端删除,因为删除应该发生在来自java Web应用程序的用户请求上,此外,我们还有一些表约束和删除级联。

1 个答案:

答案 0 :(得分:0)

我不知道Hibernate,但您可以将删除更改为:

delete from (
     select * from schema.table where id=:id fetch first 50 rows only
)

假设executeUpdate()返回已删除的行数,您可以将其置于循环中(伪代码):

... stmt = session.createSQLquery("delete from ( ... fetch first 50 rows only )");
int n = 1
while (n > 0) {
    transaction = session.beginTransaction();
    n = stmt.executeUpdate();
    transaction.commit();    
}