可以使用hibernate的批处理插入机制仅通过1个插入查询来插入多条记录

时间:2019-07-19 11:27:00

标签: java hibernate jpa jdbc hibernate-batch-updates

我正在使用Hibernate插入同一类的多个对象。问题是Hibernate为每个对象生成1个插入查询。相反,我需要1个查询,其中将包含所有插入的值。

我有用于在Customer表(MySql)中插入/更新Customer类对象的代码,如下所示:

Session session = sessionFactory.openSession();
Transaction tx = session.beginTransaction();
List<Customer> customers;//this list list will contain all the customers
int i=0;
while ( customers.hasNext() )  {
    Customer customer = customers.next();
    session.saveOrUpdate(customer);
    if ( i % 50 == 0 ) { //50, same as the JDBC batch size
        //flush a batch of inserts and release memory:
        session.flush();
        session.clear();
    }
    i++;
}
tx.commit();
session.close();

上面的代码使用Hibernate的批处理插入/更新机制。

这个问题是如果我有5个客户,那么它将产生5个不同的插入查询(我可以通过在属性中将show_sql设置为true来在日志中看到它)。 像这样:

INSERT INTO acct_doc_header (pk, name, age)
VALUES
(1,'Doe',10);

INSERT INTO acct_doc_header (pk, name, age)
VALUES
(2,'Eoe',10);

INSERT INTO acct_doc_header (pk, name, age)
VALUES
(3,'Foe',10);

INSERT INTO acct_doc_header (pk, name, age)
VALUES
(4,'Joe',10);

INSERT INTO acct_doc_header (pk, name, age)
VALUES
(5,'Koe',10);

相反,我想要一个包含所有语句的单个插入查询。像这样:

INSERT INTO acct_doc_header (pk, name, age)
VALUES
(1,'Doe',10),
(2,'Eoe',10),
(3,'Foe',10),
(4,'Joe',10),
(5,'Koe',10);

这可以通过Hibernate以某种方式实现吗?我认为它应该由Hibernate支持。我搜索了各种文章,但没有运气。

如果有帮助,我将在我的应用程序中使用Hibernate 5.2.16和Spring 4.3.15。

0 个答案:

没有答案