java - 如何使用hibernate hql从表中批量删除记录?

标签 java hibernate hql bulk

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

一切运行正常,但我的问题是:

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

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

最佳答案

需要考虑的事情很少。

1.) 如果配置,缓存将如何表现。

2.) 对于1000000条记录,肯定需要进行负载测试。 OOM错误是否有变化。

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

另外,不使用IN运算符,在循环中使用==的性能如何。

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 和 IN > 删除操作就可以了。

关于java - 如何使用hibernate hql从表中批量删除记录?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27503963/

相关文章:

java - 创建动态表以使用按钮添加新条目

java - 类不是抽象的,不会重写抽象方法actionPerformed(ActionEvent)

java - 组织.hibernate.HibernateException : More than one row with the given identifier was found

java - Hibernate:在 HQL/QueryDSL 中使用单个 join 语句初始化所有子项?

java - Fragment 中的 ListView 不显示任何内容

java - 从 <hostname>/<ip> 调用到 <hostname> :9000 failed on connection exception: java.net.ConnectException:连接被拒绝

java - Hibernate:使用executeUpdate()批量删除不会清除一级缓存

java - Hibernate MSSQL datetime2 映射

java - JPA/Hibernate Persist 级联,即使它不应该

java - 按计数 HQL 排序