Olá desenvolvedores, continuando a implementação do CRUD com Hibernate, hoje implementaremos o método para atualizar o banco de dados. CRUD é o acrônimo para as quatro operações básicas comumente utilizadas em banco de dados, a saber Create (Criação), Read (Consulta), Update (Atualização) e Delete (Destruição).
Criaremos então o método upadateMerge() em que a função será atualizar ou salvar, sendo necessário apenas passar um objeto. E para isso iremos utilizar o “merge”, o retorno do “merge” é um objeto do tipo EntityManager. O “merge” é um método que lida com o objeto no estado Datached, o que significa que o objeto não está vinculado ao EntityManager.
Assim se os dados do objeto forem idênticos aos já persistidos na base de dados um novo objeto no estado Managed será retornado. Quando um objeto está em estado Manager, qualquer alteração no objeto será sincronizada com o dado persistido. No entanto, se pelo menos um dado do objeto passado for diferente dos que já estão persistidos, então um novo registro será gerado.
ESTRUTURANDO O MÉTODO
A entidade a ser retornada deverá ser tal como foi persistida no banco de dados. O método em si, possui quase a mesma estrutura do método salvar(). Isto significa que primeiro é preciso instanciar um transaction (transação), que é o método que instancia uma interface responsável pelo gerenciamento de transações das entidades.
EntityTransaction transaction = entityManager.getTransaction();
Assim para abrir o escopo de transação do EntityManager é preciso primeiro, iniciar a transação.
transaction.begin();
Agora é o momento de persistirmos os dados, porém, é neste ponto que o método atualizar() se distingue do método salvar(). Aqui utilizaremos o já mencionado método merge que recebe um objeto.
E entitadesalva = entityManager.merge(entidade);
Por fim é preciso commitar os dados persistidos. O commit é o ato de enviar dados ou códigos para serem armazenados, neste caso, em um banco de dados.
transaction.commit();
Após todo este fluxo o dado persistido na base de dados é retornado, tendo sido salvo e/ou atualizado.
Return entidadeSalva;
TESTANDO A APLICAÇÃO
Com o Hibernate testar a aplicação é ainda mais simples. No método de teste utilizaremos o método uptadateMerge(), onde os dados do objeto ou serão atualizados ou um novo registro será criado.
Na classe de teste criaremos um novo método o testeUpdate(), no escopo do método o primeiro passo é instanciar o DAO e logo após a entidade UsuarioPessoa. E então basta atribuir os dados que serão atualizados.
Após a inserção dos dados que serão atualizados, utilizaremos o daoGeneric para chamar o método updateMerge() que receberá o objeto pessoa como argumento. O updateMerge() irá na base de dados salvar o novo registro para retornar o objeto pessoa.
Pessoa = daoGeneric.updateMerge(pessoa);
Os dados serão exibidos no console utilizando a saída padrão System.out, cuja instrução System.out.println(), gera uma saída de texto entre aspas duplas, isto é, uma String.
System.out.println(pessoa);
EM POUCAS PALAVRAS
Neste tutorial mostramos a simplicidade e praticidade da implementação com o Hibernate. Assim seguindo o fluxo de processamento do método atualizar(), quando ele é chamado uma transação é iniciada. O método merge faz a verificação do estado do objeto, e, ou atualiza ou salva os novos dados, para então os dados serem commitados e retornados.