为什么hibernate persist()很慢?在我的情况下,这只是缓慢的?

时间:2012-08-10 13:34:32

标签: hibernate jpa persist

我试图通过创建实体对象来填充数据库,并使用Hibernate作为JPA提供程序调用{​​{1}}。

一开始,数据库为空,然后我在循环中创建实体实例(100,000个实例),并保留每个实例。

此操作需要10分钟才能将所有实体注入数据库。 我正在使用免费的亚马逊云服务器机器,600 MB的RAM内存。

循环类似于以下内容:

persist()

如果我评论@Transactional void populateDataBase() { for(int i=0; i<100000; i++) { MyEntityPK entityInstancePK = new MyEntityPK(idfield1, idField2, idField3); MyEntity entityInstance = new MyEntity(); entityInstance.setId(entityInstancePK); entityInstance.setField1(integerValue); entityInstance.setField2(integerValue); entityInstance.persist(); } } 行,则循环在几秒钟内结束。当我取消注释persist()行时,循环需要10分钟才能完成。

此操作耗费时间和内存吗?或者它应该不快? 在这种情况下调用merge()而不是persist()更好吗?也许更快?

1 个答案:

答案 0 :(得分:3)

是的,你需要查看documentation on batch processing

你想做更像

的事情
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();
    }
}