Olá desenvolvedores, neste tutorial iremos implementar um método delete para remover registros da base de dados. A implementação do método delete() seguirá as mesmas bases do método salvar(). Assim no DaoGeneric implemente o método delete() que receberá como parâmetro a entidade que será deletada.
public void delete(E entidade){
}
O escopo do método delete() trará o EntityManager que vai invocar a classe JPAUtil que 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.
No entanto, para que as 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á remover a entidade passada por parâmetro. E então os dados serão “commitados” e a sessão será fechada.
entityManager.remove(entidade);
entityTransaction.commit();
entity.Manager.close();
Na classe PessoaBean implementaremos o método remove(), onde o daoGeneric invocando o método delete() irá receber como argumento o objeto pessoa que contém todos os dados. Para ficar na mesma tela após deletar os dados, o método retornará uma String vazia.
Na primeirapagina.xhtml será implementado o botão “remove” chamando o método remove() da classe PessoaBean.
CORRIGINDO ERROS
É comum conflitos na parte de persistência quando da implementação de um método em JPA para remover um registro do banco de dados. Caso aconteça com você, a solução pode ser a implementação de um método que removerá os dados por ID (identificador).
public void deletePorId(E entidade){
}
Para que esse método funcione será preciso descobrir qual é a chave primária do registro que deverá ser removido. Isto é, teremos que fazer com que o JPA – Java Persistence API, identifique a primary key, para que o comando para deletar seja enviado.
Na classe JPAUtil implementaremos um método para o qual passaremos como parâmetro uma entidade, e então será retornada a chave primária dessa entidade.
No DaoGeneric, por meio da JPAUtil obteremos a primaryKey da entidade recebida. Assim implementaremos um HQL – Hibernate Query Language, por meio do qual escreveremos a query responsável por deletar o registro. Dessa forma, será removida da base de dados a entidade onde o ID for igual ao identificador que o JPA “descobriu”. Finalizamos a query enviando o comando de executeUpdate().
Dessa forma serão estas duas únicas linhas de código diferentes do método delete() anteriormente implementado.
Na classe PessoaBean o método remove(), onde o daoGeneric invocando o método delete() recebe como argumento o objeto pessoa que contém todos os dados, removerá agora por ID, e instanciará uma nova pessoa.
public String remove(){
daoGeneric.deletePorId(pessoa);
pessoa = new Pessoa();
return "";
}
EM POUCAS PALAVRAS
Neste tutorial utilizamos o JSF – JavaServer Faces, e o JPA para removermos um registro da base de dados. E o fizemos de duas formas, resolvendo em um segundo momento o problema de conflito no contexto de persistência.