我需要执行类似
的操作 for (int i = 0; i<=moreThanThousand; i++){
Entity e = new Entity();
insertEntity(e);
}
或
for (Entity e: moreThanThousandEntities){
updateEntity(e);
}
Hibernate中是否有一些批处理机制?在多个线程中执行此工作是否有意义?什么是最佳做法? 使用JDBC我会使用PreparedStatement的addBatch()和executeBatch()方法,但我不是Hibernate的专家。 提前谢谢!
答案 0 :(得分:3)
您可以使用以下方法定义批量大小:
hibernate.jdbc.batch_size 20
批量插入/更新很简单:
for ( int i=0; i<100000; i++ ) {
Customer customer = new Customer(.....);
session.save(customer);
if ( i % 20 == 0 ) { //20, same as the JDBC batch size
//flush a batch of inserts and release memory:
session.flush();
session.clear();
}
}
有关详细信息,请查看here。
答案 1 :(得分:1)
如果您正在处理大量数据,例如每天导入数据,并且您有一个非常小的处理窗口,那么最好的方法是使用JDBC直接访问您的数据库,考虑所有这些:< / p>
我可以告诉你,在系统上我们应该每天只用2小时处理大约8百万条记录(我没有以字节为单位但是很大),因此是达到最佳性能的唯一方法即使使用最高硬件也是如此。
我希望我给你一个新的有用的方法来考虑。