Er zijn veel mogelijke knelpunten in bulkoperaties. De beste aanpak hangt sterk af van hoe uw gegevens eruitzien. Bekijk de Sluimerhandleiding sectie over batchverwerking.
Zorg er in ieder geval voor dat u het volgende patroon gebruikt (overgenomen uit de handleiding):
Session session = sessionFactory.openSession();
Transaction tx = session.beginTransaction();
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();
}
}
tx.commit();
session.close();
Als u een plat bestand toewijst aan een zeer complexe objectgrafiek, moet u misschien creatiever worden, maar het basisprincipe is dat u een balans moet vinden tussen het pushen van flinke brokken gegevens naar de database bij elke flush/commit en het vermijden van de grootte van de cache op sessieniveau exploderen.
Ten slotte, als u Hibernate niet nodig hebt om verzamelingen of cascadering af te handelen om uw gegevens correct in te voegen, overweeg dan om een StatelessSession .