如何使用hibernate hql批量删除表中的记录?

时间:2014-12-16 11:48:46

标签: java hibernate hql bulk

我正在尝试从数据库表Student批量删除记录。

一切正常但我的问题是

在给定的代码段中,我的列表(请参阅query:studentIdList)大小是否大于1000000时是否有任何限制?在这种情况下,我是否需要做额外的事情?

String hql = "delete from Student where id in (:studentIdList)";
session.createQuery(hql).setParameterList("studentIdList",studentIdList).executeUpdate();
session.flush();

1 个答案:

答案 0 :(得分:2)

有几件事需要考虑。

1。)如果配置cache将如何表现。

2.。对于1000000 records,肯定需要进行负载测试。是否有 OOM 错误的更改。

您可以尝试使用上面的HQLHibernate Batch,然后衡量并提出统计数据。盲目地告诉统计数据是不可能的。

另外,不是使用IN operator,而是在循环中使用==的效果如何。

WHERE id = 1;

Is transformed to a simple equality filter.

WHERE id IN (1);

Is transformed into an array match of:

WHERE id = ANY(ARRAY[1]);

我建议你试试,对你来说这将是一个有趣的练习。

在阅读更多内容并进行实验后,Batch将在内部仅使用IN运算符进行最终查询。使用批处理将在中间添加额外的进程,我使用HQL with IN进行删除操作的想法将很好去。