JPA - Como dar insert ou update via WHERE sendo preparando um só método?

7 respostas
A

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(); }

7 Respostas

A

Acabei de testar com o //em.persist(objPessoaInfo);
mas dá java.lang.IllegalStateException: Transaction already active

A

Tentei o código abaixo e nada...

public void defineImagemPrincipalInsertUpdate(int idImagemPrincipal, int idPessoa) {
		  EntityManager em = new JPAUtil().getEntityManager();
		 
		  PessoaInfo objPessoaInfo = new PessoaInfo();
		  objPessoaInfo = em.find(PessoaInfo.class, idPessoa);
		  objPessoaInfo.setFotoPrincipal(idImagemPrincipal);
		  try{
		  if(objPessoaInfo.getIdPessoa() == null){
		  em.merge(objPessoaInfo);
		  
		 
		  }else{
		  em.refresh(objPessoaInfo);
		  }
		  }catch(Exception e){
			  e.printStackTrace();
		  }
		  }
}
Tiburcio_Mancha

Não tem transação nenhuma ae, por isso que não faz nada!Pesquisa isso!

E para salvar é persist mesmo!!Alterar merge!

A

Já tentei mas não funciona…

Agora fala que é um objeto Detached. O que é Detached?

Tiburcio_Mancha

olha no google!

A

rs… Já olhei… 8)

lucas_carvalho100

Você não esta usando nenhuma transação.
Olha o exemplo abaixo:

public class JPAUtil {

private static EntityManagerFactory emf = null;

private JPAUtil() { 
}

static {
	emf = Persistence.createEntityManagerFactory("MyJPA"); 
}

public static EntityManager getEm() {
	return emf.createEntityManager();
}
}


private static void testPersist() {

        EntityManager em = JPAUtil.getEntityManager();
        EntityTransaction etx = em.getTransaction();
        etx.begin();
        
        Cliente cliente = new Cliente();
        cliente.setNome("Joao");
        cliente.setEndereco("Rua Teste, 560");
        cliente.setTelefone("4545-6765");

        em.persist(cliente);
        //cliente.setTelefone("2");
	   
        etx.commit();  //o objeto é persistido aqui

        em.close();	  //fecha o contexto de persistencia

        System.out.println("Terminou persist!!!");
}
Criado 23 de dezembro de 2010
Ultima resposta 27 de dez. de 2010
Respostas 7
Participantes 3