Update no JPA - Qual o melhor jeito de se implementar?

2 respostas
ynaue

Oi pessoal!!!

Surgiu uma duvida: Como vcs estão implementado o update de voces???
Andei procurando na net e vi que tem gente que só faz assim:

<blockquote>public boolean atualizar(Dados vo ) throws PersistenceException {

EntityManager manager = Conexao.getFactory().createEntityManager();

try {

EntityTransaction tx = manager.getTransaction();

tx.begin();

Dados d= manager.find(Dados.class,vo.getId());

d=vo;

tx.commit();

…</blockquote>

E vi gente fazendo assim (colocando o merge):

<blockquote>public boolean atualizar(Dados vo ) throws PersistenceException {

EntityManager manager = Conexao.getFactory().createEntityManager();

try {

EntityTransaction tx = manager.getTransaction();

tx.begin();

Dados d= manager.find(Dados.class,vo.getId());

d=vo;

manager.merge(d);

tx.commit();

…</blockquote>

E ai???
Qual é o jeito mais correto de se fazer???
Ou não é nenhum desses???

Testei os 2 jeitos e em algumas tabelas (não sei pq) não atualizam que senão tiver o merge, mas em compensação se for passado um ID que não existe é como se eu estivesse inserindo um novo item.

E agora?

O que vcs me indicam???

Muito Obrigada!!! :lol:

2 Respostas

P

tb gostaria de saber

xD

kotonet_ga

Segue um exemplo em que se a entidade ainda não existir no banco ele persiste caso exista ele atualiza.

public void salvar(AgenteNegocio agenteNegocio) {
        EntityManager em = null;
        em = getEntityManager();
        try {
            em.getTransaction().begin();
            if (agenteNegocio.getIdAgenteNegocio() == 0) {
                em.persist(agenteNegocio);
                em.close();
            } else {
                em.merge(agenteNegocio);
                em.close();
            }
        } catch (NullPointerException e) {           
                em.getTransaction().begin();
                em.persist(agenteNegocio);
                em.close();           
        }

    }
Criado 12 de dezembro de 2006
Ultima resposta 19 de mai. de 2010
Respostas 2
Participantes 3