Estou com um problema na execução de uma lista de objetos, ao processar essa lista de objetos
queria salvar os objetos da lista em lote assim como diz a documentação do hibernate:
Session session = sessionFactory.openSession();
Transaction tx = session.beginTransaction();
for ( int i=0; i<100000; i++ ) {
Customer customer = new Customer(.....);
if ( i % 20 == 0 ) { //20, same as the JDBC batch size
//flush a batch of inserts and release memory:
session.flush();
session.clear();
}
processarCustomer(session, customer);
}
tx.commit();
session.close();
private processarCustomer(Session session, Customer customer){
try{
session.save(customer);
}catch(Exception e){
//Caso ocorra alguma falha em persistir o objeto não falhar o lote de procesasmento
//Continuar processeguindo o processamento dos demais customers sem dar rollback na transacao
}
}
Porém se eu realizar dessa forma, caso ocorra um erro na hora de gravar um objeto entre o lote, só consegui
dando um rollback na transacao inteira, perdendo os outros dados já gravados.
Queria algo para continuar processando o lote, mas ignorar um dos objetos com falha entre esse lote.
Se eu abrir uma transação para cada objeto, o processamento fica muito lento, algumas sugestões?!