Slaapstand heeft een Batch-functionaliteit. Maar in het bovenstaande geval gebruik ik Native SQL, volgens mijn observatie is de slaapstand-batch niet veel effectief in het geval van Native SQL. Ja, het vermijdt zeker de geheugenfout, maar verbetert niet veel prestaties. Vandaar Ik trok me terug om JDBC Batch in Hibernate te implementeren. Hibernate biedt methode doWork()
om verbinding te krijgen vanuit de sluimerstand.
Session session = sessionFactory.openSession();
Transaction tx = session.beginTransaction();
//get Connction from Session
session.doWork(new Work() {
@Override
public void execute(Connection conn) throws SQLException {
PreparedStatement pstmt = null;
try{
String sqlInsert = "insert into sampletbl (name) values (?) ";
pstmt = conn.prepareStatement(sqlInsert );
int i=0;
for(String name : list){
pstmt .setString(1, name);
pstmt .addBatch();
//20 : JDBC batch size
if ( i % 20 == 0 ) {
pstmt .executeBatch();
}
i++;
}
pstmt .executeBatch();
}
finally{
pstmt .close();
}
}
});
tx.commit();
session.close();