JPA - Como dar insert ou update via WHERE sendo preparando um só método?
7 respostas
A
andredecotia
Olá,
a lógica é dar insert via WHERE se já existir o registro então deverá fazer update.
Veja o método:
/**
* Seta imagem principal do autor (Insert\Update)
*/
public void defineImagemPrincipalInsertUpdate(int idImagemPrincipal, int idPessoa) {
EntityManager em = new JPAUtil().getEntityManager();
em.getTransaction().begin();
PessoaInfo objPessoaInfo = em.find(PessoaInfo.class, idPessoa);
objPessoaInfo.setFotoPrincipal(idImagemPrincipal);
em.merge(objPessoaInfo); //Aqui que está a dificuldadade, qdo. uso merge faz insert caso exista registro não faz nada e qdo. dou refrash ele atualiza mas se não há dado ele não faz nada
em.getTransaction().commit();
em.close();
}
Não tem transação nenhuma ae, por isso que não faz nada!Pesquisa isso!
E para salvar é persist mesmo!!Alterar merge!
A
andredecotia
Já tentei mas não funciona…
Agora fala que é um objeto Detached. O que é Detached?
Tiburcio_Mancha
olha no google!
A
andredecotia
rs… Já olhei… 8)
lucas_carvalho100
Você não esta usando nenhuma transação.
Olha o exemplo abaixo:
publicclassJPAUtil{privatestaticEntityManagerFactoryemf=null;privateJPAUtil(){}static{emf=Persistence.createEntityManagerFactory("MyJPA");}publicstaticEntityManagergetEm(){returnemf.createEntityManager();}}privatestaticvoidtestPersist(){EntityManagerem=JPAUtil.getEntityManager();EntityTransactionetx=em.getTransaction();etx.begin();Clientecliente=newCliente();cliente.setNome("Joao");cliente.setEndereco("Rua Teste, 560");cliente.setTelefone("4545-6765");em.persist(cliente);//cliente.setTelefone("2");etx.commit();//o objeto é persistido aquiem.close();//fecha o contexto de persistenciaSystem.out.println("Terminou persist!!!");}