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

Olá pessoal!!

Segue minha classe de persistência do hibernate:

[code]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 + “]”;
    }
    }[/code]

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??

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

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?”