【发布时间】:2012-01-01 11:55:08
【问题描述】:
我想使用休眠批量更新,我尝试了批量插入,它工作正常,这是我用于休眠的配置 :
<property name="hibernateProperties">
<value>
hibernate.dialect=org.hibernate.dialect.MySQLDialect
hibernate.hbm2ddl.auto=update
hibernate.show_sql=false
hibernate.jdbc.fetch_size=100
hibernate.jdbc.batch_size=100
hibernate.jdbc.batch_versioned_data=true
hibernate.order_inserts=true
hibernate.order_updates=true
hibernate.cache.use_query_cache=false
hibernate.cache.use_second_level_cache=false
</value>
</property>
这是 DAO 代码:
public void updateBulkEmployees(List<Employee> employees) throws Exception {
for (int i = 0; i < employees.size(); i++) {
sessionFactory.getCurrentSession().update(employees.get(i));
if (i % 100 == 0) {
sessionFactory.getCurrentSession().flush();
sessionFactory.getCurrentSession().clear();
log.debug("Flushing batch:" + (int) (i / 100));
}
}
sessionFactory.getCurrentSession().flush();
sessionFactory.getCurrentSession().clear();
}
问题:我注意到方法执行花费了很多时间(与不使用批处理所花费的时间完全相同),所以批处理更新不起作用,我是否缺少配置或正在做的事情有事吗 ? 请指教,谢谢。
【问题讨论】:
-
仅仅因为它需要相同的时间并不意味着更新不是批处理的。这也可能意味着使用了批处理,但根本不会让事情变得更快。
-
所以你的意思是上面的配置没有问题,还是只能改进或调整更多?
-
@JB Nizet,在这种情况下如何让事情变得更快,你有什么建议?
-
确实,我看不出有什么问题。您必须进行分析,然后进行实验,以了解缓慢的来源。可能是网络、数据库、索引过多、内存不足……
标签: hibernate jakarta-ee