JPA....DUvida referente ao comando MErge

olá,

qual a diferença de find e merge nessa caso abaixo ???

abs


public boolean alterarCadastro(PessoaFisica pessoaFisica)   
    {   
           
        factory = Persistence.createEntityManagerFactory("banco");   
        manager = factory.createEntityManager();   
           
        EntityTransaction tx = manager.getTransaction();   
        tx.begin();   
        try   
        {   
            pessoaFisica = manager.merge(pessoaFisica);   
               
            manager.persist(pessoaFisica);   
            manager.flush();   
            manager.clear();   
            tx.commit();   
           
        }   
        catch (RuntimeException e)   
        {   
            tx.rollback();   
            JOptionPane.showMessageDialog(null, e, "Erro!", 0);   
               
            manager.close();   
            factory.close();   
               
            return false;   
        }   
        manager.close();   
        factory.close();   
        return true;   
    }  

cara posso estar falando besteira, não sou um expert em jpa, porém vou tentar ajudar
o comando merge, atualiza o objeto e retorna ele atualizado, o comando find somente faz a busca pelo que eu entendo.
espero ter ajudado. você pode dar uma olhadinha no livro java persistence with hibernate que fala do hibernate annotations, ou no prórpio site do
hibernate para se informar melhor.

Bom acredito que você esta fazendo alteração de uma pessoaFisica que ja existe!!

portanto isso compila??

manager.persist(pessoaFisica);

pelo conceito que tenho sobre JPA, quando você tem um objeto e quer alterá-lo você não consergue dar persist nele e sim o merge!!

Caso esteja falando besteiras, desculpe… sou um aprendiz de JPA ainda!!

Acredito que vc tomaria a seguinte exception!!

PersistentObjectException… detached entity passed to persist…