Можно ли использовать механизм пакетной вставки hibernate для вставки нескольких записей, используя только один запрос на вставку
Я вставляю несколько объектов одного класса, используя Hibernate. Проблема в том, что Hibernate генерирует 1 запрос на вставку для каждого объекта. Вместо этого мне нужен 1 запрос, который будет содержать значения для всех вставок.
У меня есть мой код для вставки / обновления объектов класса Customer в таблице Customer (MySql) примерно так:
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 в своем приложении.