Можно ли использовать механизм пакетной вставки 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 в своем приложении.

0 ответов

Другие вопросы по тегам