Hibernate

2 respostas
L

Colquei um tópico a uns dias atras e hoje eu mexendo eu consegui arrumar o erro.

Mas apareceu outro... :oops:

Bom, mapeados todos os *.java e *.xml, eu tento fazer um teste simples e me aparece este erro:
Erro:net.sf.hibernate.MappingException: Error reading resource: br/atech/di/hibernate/DeParaUo.hbm.xml
Erro:net.sf.hibernate.MappingException: composite-id class must override equals(): br.atech.di.hibernate.DeParaUo

Bom, não sei realmente o q é....

O meu xml ta assim
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
    "-//Hibernate/Hibernate Mapping DTD 2.0//EN"
    "http://hibernate.sourceforge.net/hibernate-mapping-2.0.dtd" >
    
<hibernate-mapping>
<!-- 
    Created by the Middlegen Hibernate plugin 2.1

    http://boss.bekk.no/boss/middlegen/
    http://www.hibernate.org/
-->

<class 
    name="br.atech.di.hibernate.DeParaUo" 
    table="DE_PARA_UO"
>

    <composite-id>
        <key-property 
            name="idUnidadeOperacional" 
            column="ID_UNIDADE_OPERACIONAL" 
            type="java.lang.Long"
            length="10"
        />
        <key-property 
            name="fcodigo" 
            column="FCODIGO" 
            type="java.math.BigDecimal"
            length="22"
        />
        <key-property 
            name="fdist" 
            column="FDIST" 
            type="java.lang.String"
            length="100"
        />
    </composite-id>    


    <!-- Associations -->
    <!-- derived association(s) for compound key -->
    <!-- end of derived association(s) -->
  

</class>
</hibernate-mapping>
O arquivo . java ta assim:
package br.atech.di.hibernate;

import java.io.Serializable;
import java.math.BigDecimal;
import org.apache.commons.lang.builder.ToStringBuilder;


/** @author Hibernate CodeGenerator */
public class DeParaUo implements Serializable {

    /** identifier field */
    private Long idUnidadeOperacional;

    /** identifier field */
    private BigDecimal fcodigo;

    /** identifier field */
    private String fdist;

    /** full constructor */
    public DeParaUo(Long idUnidadeOperacional, BigDecimal fcodigo, String fdist) {
        this.idUnidadeOperacional = idUnidadeOperacional;
        this.fcodigo = fcodigo;
        this.fdist = fdist;
    }

    /** default constructor */
    public DeParaUo() {
    }

    public Long getIdUnidadeOperacional() {
        return this.idUnidadeOperacional;
    }

    public void setIdUnidadeOperacional(Long idUnidadeOperacional) {
        this.idUnidadeOperacional = idUnidadeOperacional;
    }

    public BigDecimal getFcodigo() {
        return this.fcodigo;
    }

    public void setFcodigo(BigDecimal fcodigo) {
        this.fcodigo = fcodigo;
    }

    public String getFdist() {
        return this.fdist;
    }

    public void setFdist(String fdist) {
        this.fdist = fdist;
    }

    public String toString() {
        return new ToStringBuilder(this)
            .append("idUnidadeOperacional", getIdUnidadeOperacional())
            .append("fcodigo", getFcodigo())
            .append("fdist", getFdist())
            .toString();
    }

}

Alguem saberia solucionar este erro/]

obrigado a todos! :P

2 Respostas

eduardo_lopes

cara, pra por um composite-id vc deve criar uma classe com ela, daí vc coloca os atributos “chave” nesta nova classe, e essa classe precisa ter um método chamado “equals”, e um outro q não me lembro o nome, onde vc define as regras para que o hibernate saiba diferenciar um objeto resgatado de sua base de dados de outro.

dê uma olhada na documentação do hibernate para vc entender melhor o composite-id, que eu acho que irá resolver a sua dúvida.

[]'s

maresp

O outro método é o hashCode() que devolve um int.
Sempre que sobrescrever o método equals() de uma classe vc também deve sobrescrever o método hashCode().
Recomendo ler isto e isto aqui além da documentação do hibernate.

Criado 11 de março de 2005
Ultima resposta 14 de mar. de 2005
Respostas 2
Participantes 3