dúvida sobre como deletar uma entidade que é referenciada por outras

5 respostas
P

Olá Colegas,

Ao deletar uma entidade Cliente, que fez Compras, que pode ter ItensDeCompra.

Devo deletar uma por uma programando no JPA ou deixar o SGBD fazer isso como gatilho do excluir Cliente?

Seu eu deletar as entidades refenreciadoras usando a anotação @PreRemove dentro de uma transação, o que for feito no PreRemove, respeitará essa transação?

5 Respostas

drsmachado

A idéia de excluir clientes é errada. Como você vai garantir relatórios futuros com assertividade? Apenas inative seu cadastro.
Mas, se mesmo assim quiser deletar, lembre-se, o SQL restringe a exclusão de registros que estejam referenciados em outras tabelas (como Cliente e nota_fiscal, por exemplo). Para excluir o registro “pai” é preciso excluir, antes, todas as referências ao mesmo.

P

drsmachado:
A idéia de excluir clientes é errada. Como você vai garantir relatórios futuros com assertividade? Apenas inative seu cadastro.
Mas, se mesmo assim quiser deletar, lembre-se, o SQL restringe a exclusão de registros que estejam referenciados em outras tabelas (como Cliente e nota_fiscal, por exemplo). Para excluir o registro “pai” é preciso excluir, antes, todas as referências ao mesmo.

Não é exatamente cliente a entidade que eu quero excluir, é apenas um exemplo. Mas essa de apenas esconder é bem interessante, ja vinha pensando a respeito hoje, só que aumenta a programação e incrementa parâmetros às consultas do jpa que eu ja tinha programado.

No postgresql tem a opção “no action” para não fazer nada quando o registro pai for deletado. Botei para “cascate” e ele tá deletando os referenciadores ao referenciado ser deletado.

S

programmer30:
drsmachado:
A idéia de excluir clientes é errada. Como você vai garantir relatórios futuros com assertividade? Apenas inative seu cadastro.
Mas, se mesmo assim quiser deletar, lembre-se, o SQL restringe a exclusão de registros que estejam referenciados em outras tabelas (como Cliente e nota_fiscal, por exemplo). Para excluir o registro “pai” é preciso excluir, antes, todas as referências ao mesmo.

Não é exatamente cliente a entidade que eu quero excluir, é apenas um exemplo. Mas essa de apenas esconder é bem interessante, ja vinha pensando a respeito hoje, só que aumenta a programação e incrementa parâmetros às consultas do jpa que eu ja tinha programado.

No postgresql tem a opção “no action” para não fazer nada quando o registro pai for deletado. Botei para “cascate” e ele tá deletando os referenciadores ao referenciado ser deletado.

Eu pelo menos uso o status “ativo” e “inativo” , a principio exibo apenas os ativos,se o usuario quiser exibir os inativos,deixo uma opção também,mas deletar,nunca,pois pode ser precisso em um futuro,aquele registro que foi deletado,e a tabela fica com uns furos…

drsmachado

Slow17:

Eu pelo menos uso o status “ativo” e “inativo” , a principio exibo apenas os ativos,se o usuario quiser exibir os inativos,deixo uma opção também,mas deletar,nunca,pois pode ser precisso em um futuro,aquele registro que foi deletado,e a tabela fica com uns furos…

É justamente o que acontece.
Você deleta um registro. Ok. Porém, precisa de um relatório detalhado sobre vendas. Mas algumas vendas estão associadas a registros excluídos.

drsmachado

programmer30:

Não é exatamente cliente a entidade que eu quero excluir, é apenas um exemplo. Mas essa de apenas esconder é bem interessante, ja vinha pensando a respeito hoje, só que aumenta a programação e incrementa parâmetros às consultas do jpa que eu ja tinha programado.

No postgresql tem a opção “no action” para não fazer nada quando o registro pai for deletado. Botei para “cascate” e ele tá deletando os referenciadores ao referenciado ser deletado.


A questão de parâmetros é o de menos, ainda mais com JPA. O detalhe é que isto deveria ter sido identificado quando da análise da situação. Isso não é algo que você, enquanto programador, deve se preocupar. Não acha?
Ah, não é apenas no postgres isso. Porém, da mesma forma, se você tem as tabelas cliente, venda, item_venda e produto, você não pode deletar um cliente cuja PK esteja referenciada como FK de venda. Precisa do cascade ou deletar os registros de venda antes.

Criado 26 de dezembro de 2013
Ultima resposta 27 de dez. de 2013
Respostas 5
Participantes 3