Erro: Hibernate - Use of @OneToMany or @ManyToMany targeting an unmapped class:

Pessoal…
Estou tentando fazer o relacionamento de muitos pra muitos…
Muitas Empresas tem Muitos Telefones…

Estou com o seguinte erro:

Exception in thread "main" org.hibernate.AnnotationException: Use of @OneToMany or @ManyToMany targeting an unmapped class: modelo.Empresa.telefones[modelo.Telefone] at org.hibernate.cfg.annotations.CollectionBinder.bindManyToManySecondPass(CollectionBinder.java:1033) at org.hibernate.cfg.annotations.CollectionBinder.bindStarToManySecondPass(CollectionBinder.java:576) at org.hibernate.cfg.annotations.CollectionBinder$1.secondPass(CollectionBinder.java:517) at org.hibernate.cfg.CollectionSecondPass.doSecondPass(CollectionSecondPass.java:43) at org.hibernate.cfg.Configuration.secondPassCompile(Configuration.java:1130) at org.hibernate.cfg.AnnotationConfiguration.secondPassCompile(AnnotationConfiguration.java:316) at org.hibernate.cfg.Configuration.generateDropSchemaScript(Configuration.java:756) at org.hibernate.tool.hbm2ddl.SchemaExport.<init>(SchemaExport.java:93) at org.hibernate.tool.hbm2ddl.SchemaExport.<init>(SchemaExport.java:61) at hibernate.TabelasFactory.create(TabelasFactory.java:9) at hibernate.TabelasFactory.main(TabelasFactory.java:16)

Minha Classe Telefone:

[code]package modelo;

import java.io.Serializable;
import java.util.Collection;

import javax.persistence.Column;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.JoinTable;
import javax.persistence.ManyToMany;
import javax.persistence.Table;

import org.hibernate.annotations.Entity;

@Entity //Anotação que informa que esta classe é de persistência
@Table(name=“telefone”, schema=“nolugar”) //Anotação que informa a tabela e esquema mapeada
public class Telefone implements Serializable{

private static final long serialVersionUID = 1L;

@Id //Definição da chave primária
@GeneratedValue(strategy = GenerationType.IDENTITY) //Definição do mecanismo da chave primária
@Column(name="idtelefone") //Definição da coluna mapeada para o atributo
private int		idTelefone;

@Column(name="telefone")
private String 	telefone;

@ManyToMany(fetch=FetchType.LAZY)
@JoinTable(name="empresa_telefone", schema="nolugar",
joinColumns=@JoinColumn(name="idtelefone"),
inverseJoinColumns=@JoinColumn(name="idempresa"))
private Collection<Empresa> empresas;

public Collection<Empresa> getEmpresas() {
	return empresas;
}
public void setEmpresas(Collection<Empresa> empresas) {
	this.empresas = empresas;
}
public int getIdTelefone() {
	return idTelefone;
}
public void setIdTelefone(int idTelefone) {
	this.idTelefone = idTelefone;
}
public String getTelefone() {
	return telefone;
}
public void setTelefone(String telefone) {
	this.telefone = telefone;
}

}[/code]

Minha Classe Empresa:

[code]package modelo;

import java.io.Serializable;
import java.sql.Blob;
import java.util.Collection;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.JoinTable;
import javax.persistence.ManyToMany;
import javax.persistence.ManyToOne;
import javax.persistence.Table;

import org.hibernate.annotations.Cascade;
import org.hibernate.annotations.CascadeType;
import org.hibernate.annotations.Fetch;
import org.hibernate.annotations.FetchMode;

@Entity //Anotação que informa que esta classe é de persistência
@Table(name=“empresa”, schema=“nolugar”) //Anotação que informa a tabela e esquema mapeada
public class Empresa implements Serializable {

private static final long serialVersionUID = 1L;

@Id //Definição da chave primária
@GeneratedValue(strategy = GenerationType.IDENTITY) //Definição do mecanismo da chave primária
@Column(name="idempresa") //Definição da coluna mapeada para o atributo
private int		idEmpresa;

@ManyToMany(fetch=FetchType.LAZY)
@JoinTable(name="empresa_telefone", schema="nolugar",
joinColumns=@JoinColumn(name="idempresa"),
inverseJoinColumns=@JoinColumn(name="idtelefone"))
private Collection<Telefone> telefones;

public int getIdEmpresa() {
	return idEmpresa;
}
public void setIdEmpresa(int idEmpresa) {
	this.idEmpresa = idEmpresa;
}
public Collection<Telefone> getTelefones() {
	return telefones;
}
public void setTelefones(Collection<Telefone> telefones) {
	this.telefones = telefones;
}

}[/code]

Meu gerador de tabelas:

[code]package hibernate;

import org.hibernate.cfg.AnnotationConfiguration;
import org.hibernate.tool.hbm2ddl.SchemaExport;

public class TabelasFactory {

public static void create(AnnotationConfiguration cfg) {   
    new SchemaExport(cfg).create(false, true);   
}   

public static void main(String[] args) {
	AnnotationConfiguration cfg = new AnnotationConfiguration();
    cfg.addAnnotatedClass(modelo.Empresa.class);
    cfg.addAnnotatedClass(modelo.Telefone.class);
    create(cfg);   

}   

} [/code]

Meu hibernate.cfg.xml

[code]<?xml version="1.0" encoding="utf-8"?>

	<property name="connection.driver_class">
		com.mysql.jdbc.Driver
	</property>
	
	<property name="connection.url">
		jdbc:mysql://localhost/noLugar
	</property>
	
	<property name="dialect">
		org.hibernate.dialect.MySQLDialect
	</property>
	
	<property name="show_sql">true</property>
	<property name="connection.username">root</property>
	<property name="connection.password">123</property>
	<property name="connection.pool_size">10</property>
	
	<!-- mapping classes -->
	<mapping class="modelo.Empresa" />
	<mapping class="modelo.Telefone" />
</session-factory>

[/code]

Alguem saberia me indicar qual o possível erro?

Cara,

tenta mudar

Ou, seja, retirar do plural.

Infelizmente, não tenho como testar isso agora…
Mas acho que o problema é por aí.

Outra tentativa é usar @MappedBy.

Boa sorte.

Abração.

o nome da propriedade não tem nada a ver… ate pq é convenção usar olural para indicar varias instancias de uma classe.
o peoblema esta aqui:

import org.hibernate.annotations.Entity; 

vc precisa usar:

import javax.persistence.Entity;

da mesma maneira que na outra classe.

[]´s

1 curtida

Só uma observação já que no seu cfg.xml você já está mapeando as classes,:

 ...
        <!-- mapping classes -->   
        <mapping class="modelo.Empresa" />   
        <mapping class="modelo.Telefone" />   
...

Você pode mudar

AnnotationConfiguration cfg = new AnnotationConfiguration();   
        cfg.addAnnotatedClass(modelo.Empresa.class);   
        cfg.addAnnotatedClass(modelo.Telefone.class);   
        create(cfg);  

Para apenas isso

AnnotationConfiguration cfg = new AnnotationConfiguration();   
      cfg.configure();
        create(cfg);  

Eu por exemplo só uso cfg.addAnnotatedClass quando eu uso o hibernate.properties invés do cfg.xml