Persistencia de classes - Hibernate - Chave estrangeira é cadastrada nula

2 respostas
ScottBrank

Opa!

Pessoal, estou encarando um problema que já vem tomando muito tempo.

Tenho que cadastrar no banco de dados uma linha na tabela de Clubes, sendo que cada clube tem um único responsavel. O responsável também é uma classe de persistência e uma tabela do banco(tabela e classe de nome Diretoria ) . Essa classe Diretoria herda de Pessoa, que é a classe mais básica da minha aplicação.

Muito bem..

Aqui estão os códigos dos mapeamentos das minhas classes:

Clube.hbm.xml
<hibernate-mapping>
        <class name="br.com.guepardus.coliseum.entidades.Clube" table="Clube">
                <id name="id" column="CODIGO">
                        <generator class="sequence">
                         <param name="sequence">GEN_PK_CLUBE</param>
                        </generator>
                </id>
                <property name="nomeFantasia" column="NOMEFANTASIA"/>
                <property name="CNPJ" column="CNPJ"/>
                <property name="razaoSocial" column="RAZAOSOCIAL"/>
                <property name="modalidade" column="MODALIDADE"/>
                <property name="endereco" column="ENDERECO"/>
                <property name="telefone" column="TELEFONE"/>
                <property name="localLogo" column="LOCALLOGO"/>
                <one-to-one name="responsavel"
                            class="br.com.guepardus.coliseum.entidades.Diretoria"/>
        </class>
</hibernate-mapping>
Diretoria.hbm.xml
<hibernate-mapping>
        <class name="br.com.guepardus.coliseum.entidades.Diretoria"
               table="Diretoria">
                <id name="id" column="CODIGO">
                        <generator class="native"/>
                </id>
                <property name="cargo" column="CARGO"/>
                <one-to-one name="pessoaMaster"
                            class="br.com.guepardus.coliseum.entidades.Pessoa"/>
        </class>
</hibernate-mapping>
Pessoa.hbm.xml
<hibernate-mapping>
        <class name="br.com.guepardus.coliseum.entidades.Pessoa" table="Pessoa">
                <id name="id" column="CODIGO">
                        <generator class="native"/>
                </id>
                <property name="nome" column="NOME"/>
                <property name="dataNasc" column="DATANASC"/>
                <property name="sexo" column="SEXO"/>
                <property name="cidade" column="CIDADE"/>
                <property name="estadoCivil" column="ESTCIVIL"/>
                <property name="naturalidade" column="NATURALIDADE"/>
                <property name="nacionalidade" column="NACIONALIDADE"/>
                <property name="rg" column="RG"/>
                <property name="orgExpeditor" column="ORGEXPED"/>
                <property name="cpf" column="CPF"/>
                <property name="certificadoReservista" column="CERTRESERV"/>
                <property name="tituloEleitoral" column="TITUELEIT"/>
                <property name="zonaEleitoral" column="ZONAELEIT"/>
                <property name="secaoEleitoral" column="SECAOELEIT"/>
                <property name="ctps" column="CTPS"/>
                <property name="passaporte" column="PASSAPORTE"/>
                <property name="dataValidade" column="DATAVALIDADE"/>
                <property name="banco" column="BANCO"/>
                <property name="agencia" column="AGENCIA"/>
                <property name="contaCorrente" column="CONTACORR"/>
                <property name="registroCBFS" column="REGCBFS"/>
                <property name="registroFederacao" column="REGFEDERA"/>
                
        </class>
</hibernate-mapping>

Estou conseguindo setar os dados normalmente na mão para a classe que eu quero persistir, qe é a classe Clube. Curiosamente, quando eu vou persistir os dados, uma propriedade não é enviada via Hibernate para o banco. É ela a propriedade RESPONSAVEL que é a minha chave estrangeira, que armazenaria o codigo do Diretor responsavel.
Eis o sql gerado para a persistencia:

Hibernate: insert into Clube (NOMEFANTASIA, CNPJ, RAZAOSOCIAL, MODALIDADE, ENDERECO, TELEFONE, LOCALLOGO, CODIGO) values (?, ?, ?, ?, ?, ?, ?, ?)

Portanto, eis a pergunta: Por que o hibernate não está enviando o código do meu objeto RESPONSAVEL para a tabela Clube?

2 Respostas

Insonia

Amigo,
por padrão, o Hibernate não salva relacionamentos em cascata.

Acredito que se voce utilizar o atributo cascade=“all” no mapeamento do relacionamento one-to-one cujo name=“responsavel” a persistencia deve ocorrer.

Espero ter ajudado

ScottBrank

Insonia,
Quase isso cara!

eu coloquei a propriedade, mas ele tá fazendo a persistencia ao contrario…
ele tah fazendo o seguinte query:

Hibernate: update Diretoria set CARGO=? where CODIGO=?

e tinha que ser

Update Clube set Responsalvel=? where codigo=?
Criado 10 de julho de 2008
Ultima resposta 10 de jul. de 2008
Respostas 2
Participantes 2