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?
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.
[quote=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.[/quote]
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.
[quote=programmer30][quote=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.[/quote]
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.[/quote]
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…
[quote=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…[/quote]
É 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.
[quote=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.[/quote]
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.