Просто некоторые исправления кодов в ответе Картоха.
В соответствии с Batch Procession «Операции insert(), update() и delete(), определенные интерфейсом StatelessSession, рассматриваются как прямые операции на уровне строки базы данных. Они приводят к немедленному выполнению SQL INSERT, UPDATE или DELETE соответственно. Они имеют разную семантику операций save(), saveOrUpdate() и delete(), определенных интерфейсом сеанса. "
Больше нет save(), flush(), clear() для StatelessSession. Код должен выглядеть так:
StatelessSession session = sessionFactory.openStatelessSession();
Transaction tx = session.beginTransaction();
for (int i=0; i<100000; i++) {
Item item = new Item(.....);
session.insert(item);
}
tx.commit();
session.close();
Наконец, здесь идет обсуждение разницы между обычной пакетной вставки и StatelessSession вставки: Using StatelessSession for Batch processing.
Я бы не использовал сессию для массовых операций. StatelessSesssion предназначен для массовых операций, таких как это, поскольку он не поддерживает кеш первого уровня: измените «sessionFactory.openSession()» на «sessionFactory.openStatelessSession()». Прочтите раздел «13.3» отсюда http://docs.jboss.org/hibernate/core/3.3/reference/en/html/batch.html –
Спасибо, Пангея, я не знал этого. – Kartoch
Я не уверен, что session session.clear() необходимо сохранить в этом примере: нет необходимости высекать все объекты из кеша сеанса, потому что нет кеша с сеансом без состояния. Я напишу это в источнике ... – Kartoch