Saudações a todos, Estou usando Hibernate 4 em um projeto eis a situação:
Tenho duas classes: FilmeGenero
Relacionamento muitos para muitos (ManytoMany)
Gostaria de apagar um registro da classe Genero, mas surge o erro:
[color=red]cannot delete or update a parent row: a foreign key constraint fails[/color]
O erro é devido a classe Genero pertencer a algum registro do filme.
Por ex. quero apagar o registro AÇÃO(Genero) mas o (Filme)MAQUINA MORTIFERA está ?ligada? a ela.
Se eu colocar o @Cascade( value = CascadeType.Delete ) dentro da classe Genero ela apagará o Filme tbm. Coisa que eu não quero.
Gostaria de apagar somente o gênero e a outra tabela ?Filme_genero? que contem as chaves estrangeiras.
Alguém tem idéia se é possível fazer isso e como fazer?
Se não queres apagar os filmes todos de um género quando apagas o género (claro que isto não faria sentido), antes de apagar os género tens de modificar os filmes desse género para deixarem de pertencer ao mesmo.
O modo que achei para contornar a situação foi usar JDBC.
Primeiro apago a tabela "filme_genero" (por meio de SQL puro) que contem as chaves estrangeiras das classe Filme e Genero.
publicvoidexclui(Generogenero){Stringsql="delete from filme_genero where genero_id = ?";try{PreparedStatementstatement=conexao.prepareStatement(sql);statement.setLong(1,genero.getId());statement.execute();statement.close();}catch(SQLExceptionex){thrownewRuntimeException(ex);}}
e por ultimo uso o hibernate para apagar o registo
session.delete( genero );
tx.commit();
Não é uma solução muito agradável mas ao menos funciona. Faz o que quero, apagar somente o registro "Genero" e não
aparece mais a mensagem.
[color=red]cannot delete or update a parent row: a foreign key constraint fails[/color]
É prefiiiiiriiiiiivel ficar sem responder que enviar resposta inadequada, inútil, sem utilidade, indiferente, desleixada, boba e por fim fraca!
:?: :?: :?:
É prefiiiiiriiiiiivel ficar sem responder que enviar resposta inadequada, inútil, sem utilidade, indiferente, desleixada, boba e por fim fraca!
:?: :?: :?: E pq vc acha que eu faria isso? Pq vc acha que minha resposta não foi adequada?
Hebert_Coelho
Enquanto aguardo sua resposta sobre a pergunta que fiz acima, achei bom te alertar de algo.
O delete como você está fazendo é desaconselhável em todos os livros que falam de JPA que eu já li.