Olá desenvolvedores, neste tutorial iremos além de salvar a entidade, retornar ou manter em tela os dados que foram salvos. Observe que assim que os dados inseridos no formulário são enviados para a base de dados, os campos voltam ao estado inicial. Isso acontece porque instanciamos uma nova pessoa no método salvar. Assim a view é renderizada com o novo objeto pessoa.

Para manter os dados na mesma página em são inseridos o primeiro passo será criar na primeirapagina.xhtml um novo campo inputText para receber o ID, que será gerado de forma automática pelo JPA. O campo ID será um campo apenas de leitura.

IMPLEMENTANDO O MERGE

O método merge() salva e atualiza o objeto e retorna tal como ele foi salvo no banco de dados. Entenda, o merge atualiza o registro e não apenas insere ele no banco. No entanto, falamos que ele salva e atualiza porque se o registro não existir na base de dados ele irá inseri-lo mesmo assim.

A implementação do método merge() segue as mesmas bases do método salvar(). Assim no DaoGeneric implemente o método merge() que receberá como parâmetro uma entidade.

public E merge(E entidade){
}

No escopo do método estabeleceremos o EntityManager que vai invocar a classe JPAUtil e assim prover a persistência dos dados. A classe JPAUtil instancia um EntityManager, deixando-o disponível para toda a aplicação.

Assim, todos os usuários compartilharão da mesma instância do framework para realizar as operações do banco de dados. Mas para que essas transações da base de dados sejam possíveis, chamaremos o EntityTransaction que é quem obterá a transação. Esta transação deverá ser iniciada, isto é, deverá ser colocada como ativa. E por fim o entityManager irá salvar e/ou atualizar a entidade que for recebida por parâmetro.

Assim, teremos uma variável “retorno” que irá receber a entidade que deverá ser retornada. Os dados serão então “commitados”, a sessão será encerrada e os dados serão retornados.

E retorno = entityManager,merge(entidade);
entityTransaction.commit();
entity.Manager.close();

return retorno;

Sobre o “COMMIT”, quando em uma transação do banco de dados as operações são concluídas com sucesso, sendo os dados permanentemente alterados, damos a esta operação o nome de COMMIT.

No método salvar() da classe PessoaBean, o objeto daoGeneric irá agora invocar o merge() e atribuir os dados obtidos do objeto pessoa, isto é os dados obtidos da tela e injetar em uma nova pessoa. O merge() irá até a base de dados para salvar os dados e retorná-los na tela.

INSTANCIANDO UM NOVO OBJETO

O merge() atualiza o objeto mas e seu quiser criar um novo objeto, como proceder? É bem simples, basta criar um método que instancia uma nova pessoa, e retorna uma String vazia para ficar na mesma página.

public String novo(){
new = new Pessoa();
return();
}

E na tela primeirapagina.xhtml criamos um novo botão para chamar o método novo().

EM POUCAS PALAVRAS

Trabalhar com o JPA é trabalhar com as instâncias do objeto, o JPA entende que quando você chama um novo objeto um novo registro deverá ser criado. E como este controle é feito pelo ID, se o identificador estiver na tela, o registro será apenas atualizado, se não houver identificador na tela um novo objeto será instanciado.