我想使用休眠批量更新,我試過批量插入並能正常工作,這裏的配置我使用休眠:Hibernate的批量更新不起作用
<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();
}
ISSUE:我可以注意到,方法執行需要很多時間(完全相同的時間,而不使用批處理),所以批量更新不起作用,我錯過配置中的某些東西或做錯了什麼? 請指教,謝謝。
僅僅因爲它需要相同的時間並不意味着更新沒有批處理。這也可能意味着使用配料,但根本不會讓事情變得更快。 – 2012-01-01 12:21:05
所以你的意思是說上面的配置沒有什麼錯,或者不能改進或者調整得更多? – 2012-01-01 12:29:51
@JB Nizet,以及如何在這種情況下加快速度,你有什麼建議? – 2012-01-01 12:31:06