Mensagem: "A classe de entidade deve ser uma classe de nível superior" nas classes do hibernate

2 respostas
eliangela

Olá pessoal!!

Segue minha classe de persistência do hibernate:
import java.io.Serializable;
import javax.persistence.Embeddable;
import javax.persistence.EmbeddedId;
import javax.persistence.Entity;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;

/**
 *
 * @author eliangela
 */
@Entity
public class ConvenioProcedimento implements Serializable {

    @Embeddable
    public static class Id implements Serializable {

        private Long idProcedimento;
        private Long idConvenio;

        public Id() {
        }

        public Id(Long idProcedimento, Long idConvenio) {
            this.idProcedimento = idProcedimento;
            this.idConvenio = idConvenio;
        }

        @Override
        public boolean equals(Object o) {
            if (o != null && o instanceof Id) {
                Id that = (Id) o;
                return this.idProcedimento.equals(that.idProcedimento) &&
                        this.idConvenio.equals(that.idConvenio);
            } else {
                return false;
            }
        }

        @Override
        public int hashCode() {
            return idProcedimento.hashCode() + idConvenio.hashCode();
        }
    }
    private static final long serialVersionUID = 1L;
    @EmbeddedId
    private Id id = new Id();
    @ManyToOne
    @JoinColumn(insertable = false, updatable = false)
    private Convenio convenio;
    @ManyToOne
    @JoinColumn(insertable = false, updatable = false)
    private Procedimento procedimento;
    private double percentualCobertura;
    private double preco;

    public ConvenioProcedimento() {
    }

    public ConvenioProcedimento(Convenio convenio, Procedimento procedimento) {
        this.convenio = convenio;
        this.procedimento = procedimento;
        this.id.idConvenio = convenio.getId();
        this.id.idProcedimento = procedimento.getId();
        procedimento.getConvenioProcedimento().add(this);
        convenio.getConvenioProcedimentos().add(this);
    }

    public Convenio getConvenio() {
        return convenio;
    }

    public void setConvenio(Convenio convenio) {
        this.convenio = convenio;
    }

    public double getPercentualCobertura() {
        return percentualCobertura;
    }

    public void setPercentualCobertura(double percentualCobertura) {
        this.percentualCobertura = percentualCobertura;
    }

    public double getPreco() {
        return preco;
    }

    public void setPreco(double preco) {
        this.preco = preco;
    }

    public Procedimento getProcedimento() {
        return procedimento;
    }

    public void setProcedimento(Procedimento procedimento) {
        this.procedimento = procedimento;
    }

    @Override
    public int hashCode() {
        int hash = 0;
        hash += (id != null ? id.hashCode() : 0);
        return hash;
    }

    @Override
    public boolean equals(Object object) {
        // TODO: Warning - this method won't work in the case the id fields are not set
        if (!(object instanceof ConvenioProcedimento)) {
            return false;
        }
        ConvenioProcedimento other = (ConvenioProcedimento) object;
        if ((this.id == null && other.id != null) || (this.id != null && !this.id.equals(other.id))) {
            return false;
        }
        return true;
    }

    @Override
    public String toString() {
        return "br.com.sistemaodontoeasy.model.persistence.ConvenioProcedimento[id=" + id + "]";
    }
}

Fiz esse modelo de classe N pra N seguindo dicas do livro "Java Persistence With Hibernate" - pág. 304, mas está dando alguns erros...
Na linha onde eu começo a escrever a minha classe :
@Embeddable
public static class Id implements Serializable {

aparece um erro no Netbeans: "the entity class must be a top-level class" - A classe de entidade deve ser uma classe de nível superior, e eu não sei como tirar essa mensagem...
Apesar deste errinho que fica aparecendo, eu consigo compilar e executar o projeto o que resulta numas tabelas muito estranhas no banco de dados:
Essa entidade devia ter os campos: idConvenio, idProcedimento, percentualCobertura e preco; mas estão aparecendo os campos: idConvenio, idProcedimento, percentualCobertura, preco, procedimento_id e convenio_id.

Como posso tirar essas mensagens e fazer o hibernate gerar as tabelas corretamente??

2 Respostas

F

Não tenho certeza, mas acho que vc deve colocar a classe do Id em outro arquivo.

B

Revivendo o Tópico =),
Boa Tarde Pessoal!
Estou com esse mesmo problema da Elisângela, Sei que é um tópico antigo mais não vi ela informar como resolveu o problema.
“Estou Seguindo o Exemplo do Mesmo Livro que Ela alguém sabe como resolver este problema?”

Criado 22 de agosto de 2009
Ultima resposta 8 de mai. de 2013
Respostas 2
Participantes 3