Olá Pessoal,
Tenho uma tabela de PESSOAS ± assim:
Create table TAB_Pessoa
(
IDPessoa int4 NOT NULL DEFAULT nextval("seqPessoa"),
NomePessoa varchar(100),
IDPessoa_Pai int,
PRIMARY KEY("IDPessoa")
)
go
ALTER TABLE TAB_Pessoa
ADD CONSTRAINT "TAB_Pessoa_IDPessoa_Pai_fkey"
FOREIGN KEY("IDPessoa_Pai")
REFERENCES TAB_Pessoa("IDPessoa")
go
Notem que o campo IDPessoa_Pai faz referencia (chave estrangeira com a propria tabela de pessoas) isso no banco de dados ele faz na boa;
No Java a classe Pessoa ficou ± assim (atentem para o atributo Pai que é do tipo Pessoa):
public class Pessoa
{
private int IDPessoa;
private String NomePessoa;
private Pessoa Pai;
//gets
public int getIDPessoa() { return IDPessoa; }
public String getNomePessoa() { return NomePessoa; }
public Pessoa getPai() { return Pai; }
//Sets
public void setNomePessoa(String nomePessoa) { NomePessoa = nomePessoa; }
public void setIDPessoa(int pessoa) { IDPessoa = pessoa; }
public void setPai(Pessoa pai) {Pai = pai; }
}
Estou com duvida agora como configurar o Hibernate para que ele entenda e trate essa chave estrangeira com a propria tabela;
Eu quero por exemplo que ao tentar excluir uma pessoa o hibernate verifique se esta pessoa é pai de alguma outra pessoa e não permita a exclusão
Já fiz varias tentativas, mas sem sucesso, uma delas o hibernate deixa deletar depois qdo tenta fazer o comitt no banco e o banco não permite (porque existe uma FOREIGN KEY) o Hibernate perde a sincronia. Em outra situação (conforme configuração abaixo) quando eu tento exluir uma pessoa ele saiu exluindo os Pais (e não os filhos)!!!
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="Cadastros" default-lazy="true" schema='"joka"'>
<class name="Pessoa" table="`TAB_Pessoa`" >
<id name="id" type="java.lang.Integer" column="`IDPessoa`">
<generator class="sequence">
<param name="sequence">"seqPessoa"</param>
</generator>
</id>
<many-to-one
foreign-key=""
name="Pai"
class="Pessoa"
column="`IDPessoa_Pai`"
not-null="true"
cascade="delete"/>
<property name="nome" column="`NomePessoa`" type="java.lang.String" length="100" />
</class>
</hibernate-mapping>
Obs.: Estou usando o PostGreSQL
Se alguem tiver alguma dica, agradeço desde já,
Abraços,
JOKA