Composite-id no Hibernate

2 respostas
Brucelee

Galera, eh o seguinte:

Na minha aplicacao tenho uma tabela que eh formada por dois campos, esses dois sao chaves estrangeiras de outras tabelas, e nesta tabela, sao chaves primarias compostas. Como eu implemento isso no arquivo .hbm, e como a classe vai ficar implementada. Pois esta dando esse erro quando inicializo:

Abracos!

2 Respostas

J2Alex

Posta os seus códigos.

Mas de boa mesmo: você realmente precisa usar chaves primárias compostas? Se tiver opção esqueça, não faça isso.

Brucelee

Bem, eu tenho uma classe Endereco, e uma classe Telefone, de 1:N, até ai tudo bem. Gerei os arquivos .HBM pela ferramente middlegen 2.1. No meu banco de dados existe uma tabela TBL_ENDERECO_TELEFONE com dois campos de chave composta (CD_ENDERECO,CD_TELEFONE)

O arquivo de mapeamento .hbm para a classe EnderecoTelefone.java ficou:

<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
    "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
    "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd" >
    
<hibernate-mapping>

<class 
    name="br.com.sistema.bancodados.beans.EnderecoTelefone" 
    table="tbl_endereco_telefone"
>
    <meta attribute="class-description" inherit="false">
       @hibernate.class
        table="tbl_endereco_telefone"
    </meta>

    <composite-id name="comp_id" class="br.com.sistema.bancodados.beans.EnderecoTelefonePK">
        <meta attribute="field-description" inherit="false">
           @hibernate.id
            generator-class="assigned"
        </meta>
        <key-property 
            name="cdEndereco" 
            column="ENDE_COD_ENDERECO" 
            type="java.lang.String"
            length="10"
        >
            <meta attribute="field-description">
               @hibernate.property
                column="ENDE_COD_ENDERECO"
            </meta> 
        </key-property>
        <key-property 
            name="cdTelefone" 
            column="TELE_COD_TELEFONE" 
            type="java.lang.String"
            length="10"
        >
            <meta attribute="field-description">
               @hibernate.property
                column="TELE_COD_TELEFONE"
            </meta> 
        </key-property>
    </composite-id>    


    <!-- Associations -->
    <!-- derived association(s) for compound key -->
    <!-- bi-directional many-to-one association to TblTelefone -->
    <many-to-one
        name="telefone"
        class="br.com.sistema.bancodados.beans.Telefone"
        update="false"
        insert="false"
    >
        <meta attribute="field-description">
           @hibernate.many-to-one
            update="false"
            insert="false"
        </meta>
        <meta attribute="field-description">
           @hibernate.column
            name="TELE_COD_TELEFONE"
        </meta>
        <column name="TELE_COD_TELEFONE" />
    </many-to-one>
    
    <!-- bi-directional many-to-one association to TblEndereco -->
    <many-to-one
        name="endereco"
        class="br.com.sistema.bancodados.beans.Endereco"
        update="false"
        insert="false"
    >
        <meta attribute="field-description">
           @hibernate.many-to-one
            update="false"
            insert="false"
        </meta>
        <meta attribute="field-description">
           @hibernate.column
            name="ENDE_COD_ENDERECO"
        </meta>
        <column name="ENDE_COD_ENDERECO" />
    </many-to-one>
    
    <!-- end of derived association(s) -->
  

</class>
</hibernate-mapping>

Nota-se que vai existir a classe EnderecoTelefonePK, como ela sera implementada? E os metodos equals() e hashCode()? Como ficam? Vai ser necessario algum metodo getter para o composite-id?

Abracos e obrigado!

Criado 2 de outubro de 2006
Ultima resposta 2 de out. de 2006
Respostas 2
Participantes 2