Capturar violação de chave estrangeira [RESOLVIDO]  XML
Índice dos Fóruns » Persistência: Hibernate, JPA, JDBC e outros
Autor Mensagem
RenatoDeSouza
Entusiasta Java
[Avatar]

Membro desde: 26/11/2007 14:32:01
Mensagens: 17
Offline

Pessoal, boa tarde.

Eu estou com uma aplicação que possui duas tabelas especificas relacionadas.
Uma tem uma chave estrangeira da outra.
Logo, quando tento deletar um registro de uma tabela que tem uma referencia em outra, o mysql não permite.

Então, como eu capturo essa situação para enviar uma mensagem para o usuário?!

This message was edited 1 time. Last update was at 03/07/2010 10:09:44

deniswsrosa
GUJ Ranger
[Avatar]

Membro desde: 21/07/2005 08:51:27
Mensagens: 807
Offline

Procure por CASCADE no mysql.

SCJP, SCEA I
[MSN]
aluisiodsv
JavaEvangelist
[Avatar]

Membro desde: 01/07/2010 17:28:24
Mensagens: 368
Offline

O Cascade só vai apagar tudo que referencia seu registro ao ser excluído.

O que vc precisa é aprender sobre tratamento de exeções.
Quando acontece isso é lançada uma exeção. É só saber capturá-la e tratá-la!

Valeu ? Ou precisa de algum tuto ?
Se precisar de algum tutorial no site da caelum tem um de java básico muuuito bom !
cvinicius
JavaEvangelist

Membro desde: 18/04/2008 16:35:05
Mensagens: 433
Localização: SP
Offline

Boa tarde

Como o pessoal falou acima o CASCADE pode te ajudar caso você queria que quando excluir da tabela principal apague também os dados relacionados, mas caso você queria realizar um tratamento, aconselho a você dar uma olhada na hierarquia de classes de SQLException, assim vai conseguir saber quando uma exceção é lançada e o tipo de erro que gerou, como por exemplo erros relacionados a foreign key.

Dê uma olhada http://java.sun.com/javase/6/docs/api/java/sql/SQLException.html

Falou.

Sun Certified Java Programmer 5
Oracle Certified Associate, Java SE
Oracle Certified Professional Java EE 5 Web Component Developer
RenatoDeSouza
Entusiasta Java
[Avatar]

Membro desde: 26/11/2007 14:32:01
Mensagens: 17
Offline

Pois é pessoal, valeu pelas respostas!

Não é o Cascade que eu procuro!

Eu quero exatamente uma forma de tratar essa exceção, só que, o SQLException não lança essa exceção!
Quer dizer, eu tentei capturar da maneira básica

}catch(SQLException sqlException){
...
}

Se alguem souber como eu capturo essa exceção..

Obrigado!!
derlon
JavaTeenager

Membro desde: 12/12/2009 14:07:01
Mensagens: 150
Offline

RenatoDeSouza wrote:... Quer dizer, eu tentei capturar da maneira básica
}catch(SQLException sqlException){
...
}..
@RenatoDeSouza oi,
Caso vc ainda não tenha conseguido, vc poderia tentar (a IDE q vc usa ó o Eclipse?) fazer o seguinte:
1. Retire sua operação de Banco do bloco Try Catch;
2. O Eclipse vai "reclamar" de alguma coisa;
3. (não tente solucionar manualmente, pelo contrario: )Utilize a ferramenta do Eclise q gera o tratamento automaticamente para vc.

Bem, p/ex.: num projeto q eu estou, q usa o Hibernate Template do Spring, ela sempre me gera isto:
garcia-jj
JWizard

Membro desde: 13/04/2009 22:11:50
Mensagens: 2715
Localização: Porto Alegre
Offline

Se entendi bem você está usando JDBC (e não hibernate) e quer saber quando uma FK foi violada, correto?

A principio não tem como, pois o JDBC é muito genérico, e tudos os métodos lançam uma SQLException genérica. Não há, por exemplo, uma ViolationException extends SQLException.

O que você pode fazer é a partir da mensagem na SQLException saber qual o erro aconteceu. Por exemplo, se você receber uma SQLException com a mensagem "Operation violates the xxxx constraint", basta você ler a mensagem e tratar ela.


http://github.com/garcia-jj
Não respondo dúvidas via MP. Use o fórum.
RenatoDeSouza
Entusiasta Java
[Avatar]

Membro desde: 26/11/2007 14:32:01
Mensagens: 17
Offline

Olá pessoal!

Isso, não estou usando Hibernate. To usando JDBC.

Pois é Garcia, eu tentei fazer isso, tratar a mensagem!
Mas, o SQLException não gera nenhuma mensagem de FK violada...
Pelo menos ate agora não descobri!

Vou continuar tentando!
Valeu pessoal.
garcia-jj
JWizard

Membro desde: 13/04/2009 22:11:50
Mensagens: 2715
Localização: Porto Alegre
Offline

Qual o banco de dados que você usa? Você quer apenas saber se há uma violação de FK ou quer saber QUAL FK?

No pgsql você precisa pegar a Exception.getRootCause para saber a mensagem real.

This message was edited 1 time. Last update was at 02/07/2010 18:40:28


http://github.com/garcia-jj
Não respondo dúvidas via MP. Use o fórum.
RenatoDeSouza
Entusiasta Java
[Avatar]

Membro desde: 26/11/2007 14:32:01
Mensagens: 17
Offline

Olá Garcia, obrigado pela resposta.

Quero saber só se existe uma violação de FK.
Nessa aplicação to usando o MySQL!

RenatoDeSouza
Entusiasta Java
[Avatar]

Membro desde: 26/11/2007 14:32:01
Mensagens: 17
Offline

Tá resolvido o problema pessoal.

Esqueci de colocar o Throws SQLException no meu método que chamava o executeUpdate.

Valeu!
 
Índice dos Fóruns » Persistência: Hibernate, JPA, JDBC e outros
Ir para:   
Powered by JForum 2.1.8 © JForum Team