Boa tarde senhores,
estou com uma duvida aqui… tenho uma aplicação web… em de meus processos necessito deletar uma quantidade aprox 30mil registros
tendo os ids deles em um List.
agora estou fazendo assim…
tenho um for que percorre essa list e chama um metodo destroy passando o id como parametro
assim:
private void removeColeta(List<Integer> idcoletas) {
for (int id : idcoletas) {
destroyColeta(id);
}
}
public void destroyColeta(Integer id){
EntityManager em = null;
try {
utx.begin();
em = getEntityManager();
Coleta coleta = null;
try {
coleta = em.getReference(Coleta.class, id);
coleta.getIdColeta();
} catch (EntityNotFoundException enfe) {
enfe.printStackTrace();
}
Fornecedor fornecedorAnt = coleta.getFornecedorAnt();
if (fornecedorAnt != null) {
fornecedorAnt.getColetaCollection().remove(coleta);
fornecedorAnt = em.merge(fornecedorAnt);
}
Fornecedor fornecedorAtu = coleta.getFornecedorAtu();
if (fornecedorAtu != null) {
fornecedorAtu.getColetaCollection().remove(coleta);
fornecedorAtu = em.merge(fornecedorAtu);
}
Insumo insumoidInsumo = coleta.getInsumoidInsumo();
if (insumoidInsumo != null) {
insumoidInsumo.getColetaCollection().remove(coleta);
insumoidInsumo = em.merge(insumoidInsumo);
}
Local localidLocal = coleta.getLocalidLocal();
if (localidLocal != null) {
localidLocal.getColetaCollection().remove(coleta);
localidLocal = em.merge(localidLocal);
}
em.remove(coleta);
utx.commit();
} catch (Exception ex) {
try {
utx.rollback();
} catch (Exception re) {
re.printStackTrace();
}
} finally {
if (em != null) {
em.close();
}
}
}
como sao 30 mil registros a serem deletados… esta muito lento!
esta errado como estou fazendo ? como ou qual a melhor maneira de resolver isso ?
muito obrigado