Delete em Cascada em Tabela com Auto Relacionamento  XML
Índice dos Fóruns » Persistência: Hibernate, JPA, JDBC e outros
Autor Mensagem
ataufo
Java Ninja
[Avatar]

Membro desde: 21/03/2009 12:15:23
Mensagens: 267
Offline

Pessoal,

não sei se é uma coisa simples. Porém eu tenho uma tabela que possui um auto relacionamento, e quando tento usar o comando delete ocorre erro de check constraint.

Banco: PostgreSQL

Segue a tabela abaixo:



Dados:

Comando executado:
delete from t06_ator where projeto = 1

Erro:
ERROR: update or delete on table "t06_ator" violates foreign key constraint "id_gen_identificador_fk" on table "t06_ator"

Solução:
Procuro algum jeito de realizar o delete em cascata, para não ocorrer o erro de deletar os registros pais antes dos filhos...


Alguem me ajuda ??

Victor Soares
ataufo@gmail.com
[Email] [MSN] [ICQ]
ViniGodoy
Moderador
[Avatar]

Membro desde: 11/12/2006 08:22:01
Mensagens: 20580
Localização: Curitiba/PR
Offline

Troque o ON DELETE NO ACTION por ON DELETE CASCADE onde for necessário.

Ou delete a tabela de referência antes (eu prefiro fazer manualmente, justamente para evitar o risco de uma cagada destruir metade do BD).

@ViniGodoy - Lattes

Tem dúvidas de Java? Poste no fórum! Não respondo dúvidas de java via MP!

Ponto V! - Desenvolvimento de Jogos Profissional - @Pontov - Facebook
Projeto Towel - Swing de uma forma inteligente (Novo lar do ObjectTableModel e do Auto-Filtro).

Ei... você está usando DefaultTableModel no seu projeto??
Não faça isso! Veja: http://www.guj.com.br/posts/list/15/199067.java#1001295
[WWW]
ataufo
Java Ninja
[Avatar]

Membro desde: 21/03/2009 12:15:23
Mensagens: 267
Offline

Obrigado pela resposta,

mas eu já botei ON DELETE CASCADE nas duas FKs existentes e não funcionou. tipo assim:



Ficou faltando alguma coisa?

Vc disse:
Ou delete a tabela de referência antes

O problema é que a tabela de referência é a mesma, por ser um auto relacionamento. Então nesse caso eu não tenho como prever se um registro está relacionado a outro ou a vários.

Victor Soares
ataufo@gmail.com
[Email] [MSN] [ICQ]
ViniGodoy
Moderador
[Avatar]

Membro desde: 11/12/2006 08:22:01
Mensagens: 20580
Localização: Curitiba/PR
Offline

Eu tenho algo parecido no meu banco. Acabei colocando o servidor de aplicação para fazer a recursão e achar os ids que deveriam ser deletados anteriormente.

No SQL-Server, existe uma cláusula chamada WITH, que permite essa exclusão em árvore. No Postgre não sei te dizer se existe algo similar.

@ViniGodoy - Lattes

Tem dúvidas de Java? Poste no fórum! Não respondo dúvidas de java via MP!

Ponto V! - Desenvolvimento de Jogos Profissional - @Pontov - Facebook
Projeto Towel - Swing de uma forma inteligente (Novo lar do ObjectTableModel e do Auto-Filtro).

Ei... você está usando DefaultTableModel no seu projeto??
Não faça isso! Veja: http://www.guj.com.br/posts/list/15/199067.java#1001295
[WWW]
ataufo
Java Ninja
[Avatar]

Membro desde: 21/03/2009 12:15:23
Mensagens: 267
Offline

tem esse algoritimo de recursão ai ??

Victor Soares
ataufo@gmail.com
[Email] [MSN] [ICQ]
ViniGodoy
Moderador
[Avatar]

Membro desde: 11/12/2006 08:22:01
Mensagens: 20580
Localização: Curitiba/PR
Offline

Não, fiz no trabalho, ficou na empresa. E é em C#, não em Java. Usando as classes de negócio.

@ViniGodoy - Lattes

Tem dúvidas de Java? Poste no fórum! Não respondo dúvidas de java via MP!

Ponto V! - Desenvolvimento de Jogos Profissional - @Pontov - Facebook
Projeto Towel - Swing de uma forma inteligente (Novo lar do ObjectTableModel e do Auto-Filtro).

Ei... você está usando DefaultTableModel no seu projeto??
Não faça isso! Veja: http://www.guj.com.br/posts/list/15/199067.java#1001295
[WWW]
ataufo
Java Ninja
[Avatar]

Membro desde: 21/03/2009 12:15:23
Mensagens: 267
Offline

humm vou ter que me virar aqui então. Obrigado.

Victor Soares
ataufo@gmail.com
[Email] [MSN] [ICQ]
 
Índice dos Fóruns » Persistência: Hibernate, JPA, JDBC e outros
Ir para:   
Powered by JForum 2.1.8 © JForum Team