Hibernate

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

[code]<?xml version="1.0"?>

<!-- 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) -->
[/code]

O arquivo . java ta assim:

[code]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();
}

}
[/code]

Alguem saberia solucionar este erro/]

obrigado a todos! :stuck_out_tongue:

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

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.