为什么hibernate persist()很慢?就我的情况而言,它只是慢了一点?

为什么hibernate persist()很慢?就我的情况而言,它只是慢了一点?,hibernate,jpa,persist,Hibernate,Jpa,Persist,我试图通过创建实体对象并使用Hibernate作为JPA提供程序调用persist()来填充数据库 首先,数据库是空的,然后我在一个循环中创建实体实例(100000个实例),并将每个实例持久化 此操作需要10分钟才能将所有实体注入数据库。 我正在使用免费的亚马逊云服务器机器,600 MB的RAM内存 循环如下所示: @Transactional void populateDataBase() { for(int i=0; i<100000; i++) { M

我试图通过创建实体对象并使用Hibernate作为JPA提供程序调用
persist()
来填充数据库

首先,数据库是空的,然后我在一个循环中创建实体实例(100000个实例),并将每个实例持久化

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

循环如下所示:

@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();
    }
}
@Transactional
void populatedDatabase()
{

对于(int i=0;i是的,您需要查看

你想做些更像

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

对于(int i=0;iHi hvgotcodes),我不认为调用clear可以帮助我。但是调用flush()可能会有帮助。谢谢你,我会检查你的链接。但是我想,@Transactional函数会自动管理它(它会自动调用flush())。这并不清楚,这是刷新会话,以便您一次保存多个会话。