Você está aqui: JPA - Java Persistence Architecture API - Arquitetura de Persistência Java ::: Interfaces, Classes e Componentes ::: EntityManager |
Atualizando um registro em uma tabela do banco de dados usando o método merge() da interface EntityManagerQuantidade de visualizações: 8654 vezes |
O método merge() da interface EntityManager é usado quando precisamos atualizar uma entidade no contexto de persistência do JPA. Este método possui a seguinte assinatura:<T> T merge(T entity) O método recebe como parâmetro a instância a ser atualizada e retorna a instância já atualizada. Veja um exemplo:
package estudosjpa;
import entidades.Cliente;
import java.util.Date;
import javax.persistence.*;
public class EstudosJPA {
public static void main(String[] args) {
// vamos criar o EntityManagerFactory a partir do contexto de persistência
EntityManagerFactory emf =
Persistence.createEntityManagerFactory("LocadoraService");
// vamos obter um objeto da interface EntityManager
EntityManager em = emf.createEntityManager();
// vamos obter o cliente com o id 4
Cliente c = em.find(Cliente.class, 4);
// o cliente foi encontrado? vamos atualizar seus dados, menos o id
if(c != null){
c.setNome("Roberto Carlos Augusto");
c.setEmail("roberto@arquivodecodigos.net");
c.setDataCadastro(new Date());
// vamos iniciar a transação e atualizar o registro no banco de dados
em.getTransaction().begin(); // inicia a transação
Cliente temp = em.merge(c); // atualiza este cliente
em.getTransaction().commit(); // finaliza a transação
System.out.println("Dados atualizados. O novo nome do cliente é: "
+ c.getNome());
}
else{
System.out.println("Registro não encontrado.");
}
em.close(); // fecha o EntityManager
emf.close(); // fecha o EntityManagerFactory
}
}
Quando executamos este código, o log do EclipseLink mostrará os seguintes comandos SQL: --SELECT ID, data_cadastro, EMAIL, NOME FROM clientes WHERE (ID = ?) bind => [4] --UPDATE clientes SET data_cadastro = ?, EMAIL = ?, NOME = ? WHERE (ID = ?) bind => [2013-06-01 15:14:32.144, roberto@arquivodecodigos.net, Roberto Carlos Augusto, 4] Dados atualizados. O novo nome do cliente é: Roberto Carlos Augusto Observe que o método merge() pode disparar uma exceção do tipo IllegalArgumentException se a instância não for uma entidade ou for uma entidade fora do contexto de persistência. Uma exceção TransactionRequiredException poderá ser disparada se o método merge() for chamado em um gerenciador de entidades controlado por um contâiner (container-managed entity manager) do tipo PersistenceContextType.TRANSACTION e não houver transação ativa. |
|
|
Veja mais Dicas e truques de JPA - Java Persistence Architecture API - Arquitetura de Persistência Java |
Dicas e truques de outras linguagens |
E-Books em PDF |
||||
|
||||
|
||||
Linguagens Mais Populares |
||||
|
1º lugar: Java |





