Olá desenvolvedores, neste tutorial aprenderemos a remover dados em cascata com o SQL – Structured Query Language. No tutorial anterior, falamos sobre o conceito de cardinalidade, mais especificamente sobre o tipo de relacionamento entre tabelas de um para muitos (1:N). Neste tipo de relacionamento um usuário pode ter mais de um número de telefone, e dois ou mais números de telefones podem pertencer a um único usuário.

Quando o relacionamento existente entre duas entidades “independentes” não é tratado, a tentativa de excluir o registro de uma tabela vinculada a outra provoca um erro de violação de restrição da chave estrangeira. Isso acontece porque a tabela “B” perderia a sua referência, que aponta para a tabela pai, a tabela “A”, e ambas apontam para o mesmo código do usuário na tabela. Entenda um pouco mais com o tutorial “CREATE TABLE E CARDINALIDADES”.

Neste tutorial implementaremos a remoção dos dados em cascata, dessa forma, excluindo os dados da entidade pai caso exista também algum dado relacionado na entidade filha, ele também será excluído.

IMPLEMENTANDO O DAO

O primeiro passo para a remoção dos dados em cascata com SQL é a criação de um novo DAO – Data Access Object (Objeto de Acesso à Dados). o DAO é a camada do sistema (pacotes, classes e métodos) que abstrai todo o acesso ao banco de dados separadamente da lógica de negócio da aplicação. É no DAO que implementamos os métodos do CRUD (Create – Read – Update – Delete).

No package dao crie a classe DaoUsuario que estenderá ao DaoGeneric, para qual passaremos como parâmetro a classe UsuarioPessoa.

No escopo do DaoUsuario crie o método removerUsuario() que como parâmetro receberá a entidade UsuarioPessoa, e então uma exceção deverá ser lançada.

public void removerUsuario(UsuarioPessoa usuaio) throws Exception{}

No método, primeiramente daremos start na transação, para então implementarmos a Query SQL onde iremos deletar um dado registro na tabela telefone, quando usuariopessoa_id desta tabela for igual ao identificador “id” obtido do objeto pessoa.

Logo após, com o createNativeQuery criaremos instruções SQL que poderão ser executadas diretamente no banco de dados, e então executaremos a instrução por meio do executeUpdate. A operação será “commitada” para consolidar a transação, executando os comandos de forma definitiva. Finalizamos o método invocando um outro método, o deletarPorId() passando como argumento o objeto pessoa.

AJUSTES NO MANAGED BEAN

No Managed Bean, UsuarioPessoaManegedBean, entenda, como uma classe estende da outra classe, poderemos deixar o daogeneric instanciado na classe DaoUsuario e deletarmos a instância do DaoGeneric.

EM POUCAS PALAVRAS

Neste tutorial implementamos um método para a remoção dos dados em cascata com SQL, quando existe relacionamento entre uma entidade pai e uma entidade filha. Dessa forma agora conseguimos remover um registro de usuário mesmo quando existe um registro vinculado a este usuário cadastrado na tabela telefone.