Der er mange mulige flaskehalse i bulkoperationer. Den bedste tilgang afhænger i høj grad af, hvordan dine data ser ud. Tag et kig på Hibernate Manual afsnit om batchbehandling.
Sørg som minimum for, at du bruger følgende mønster (kopieret fra manualen):
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();
Hvis du kortlægger en flad fil til en meget kompleks objektgraf, skal du muligvis være mere kreativ, men det grundlæggende princip er, at du skal finde en balance mellem at skubbe store bidder af data til databasen med hver flush/commit og undgå eksploderer størrelsen af sessionsniveaucachen.
Til sidst, hvis du ikke har brug for Hibernate til at håndtere indsamlinger eller cascading for at dine data kan indsættes korrekt, kan du overveje at bruge en StatelessSession .