Boa tarde,
Estou desenvolvendo um projeto web, no qual utilizo JPA, porém estou tendo dificuldade em dar update nos dados contidos em ArrayList, debugando, verifiquei que o registro foi encontrado no banco e que o comando merge está sendo chamado, mas é como se eu desse um persist, pois os dados são inseridos novamente.
O que eu estou fazendo de errado?
Obrigada.
public String importarProdutos() throws FileNotFoundException, ClassNotFoundException{
Conversation.instance().begin(true, true);
importacao.setData(new Date());
byte[] arquivo = importacao.getArquivo();
produtoManager = new ProdutoManager();
produtoManager.setProdutos(GerenciadorXML.importarProduto(arquivo));
Query query1 = entityManager.createQuery("from Usuario u where u = ?1");
query1.setParameter(1, usuarioLogado);
List<Usuario> us = (List<Usuario>) query1.getResultList();
importacao.setMantenedor(us.get(0));
entityManager.persist(importacao);
importacoes.add(importacao);
entityManager.flush();
for (int i = 0; i < produtoManager.getProdutos().size(); i++) {
Query query = entityManager.createQuery("from Produto p where p.codigo = ?1");
query.setParameter(1, produtoManager.getProdutos().get(i).getCodigo());
List<Produto> produto = (List<Produto>)query.getResultList();
if(produto.size()>0){
entityManager.merge(produtoManager.getProdutos().get(i));
}else{
entityManager.clear();
if(produtoManager.getProdutos().get(i)==null){
produtoManager.getProdutos().get(i).setMantenedor(us.get(0));
}
entityManager.persist(produtoManager.getProdutos().get(i));
entityManager.flush();
}
}
facesMessages.add("Importacao efetuada com sucesso.");
Conversation.instance().end();
return "irParaImportacaoList";
}