2010-10-20 15 views
32

Estoy recibiendo el siguiente Hibernate Excepción:Hibernate @ManyToOne hace referencia a una entidad desconocida

@OneToOne or @ManyToOne on Matchup.awayTeam references an unknown entity: Team

La clase Matchup simplificado se ve así:

@Entity public class Matchup implements Serializable 
{ 
    protected Team awayTeam; 

    @ManyToOne 
    @JoinColumn(name="away_team_id") 
    public Team getAwayTeam() { 
     return awayTeam; 
    } 
} 

La clase de equipo simplificado se ve así:

@Entity 
public class Team implements Serializable { 
    protected List<Matchup> matchups; 

    @OneToMany(mappedBy="awayTeam", targetEntity = Matchup.class, 
    fetch=FetchType.EAGER, cascade=CascadeType.ALL) 
    public List<Matchup> getMatchups() { 
     return matchups; 
    } 
} 

Notas:

  • Ambos equipos tienen subclases. No estoy seguro de si esto afecta la situación.
  • Ambos Matchup y Team aparecen en mi persistence.xml como incluidos.
  • Si pongo anotaciones de @Transient en ambos métodos getter, el error desaparece.

¿Alguien puede arrojar luz sobre por qué ocurre esta excepción?

+0

Tiene una tabla TEAM, ¿sí? ¿Pudiste hacer que algo funcionara antes de agregar @oneToMany? –

Respuesta

50

Descubrí el problema: no estaba agregando clase Team al objeto Hibernate AnnotationConfiguration. Por lo tanto, Hibernate no estaba reconociendo la clase.

+0

En mi caso olvidé la anotación @entity en una clase y recibí el mismo mensaje de error que tú. Solo publico esta información si alguien hizo el mismo error (estúpido) que yo :-) – flipperweid

+2

¿Podría describir cómo agregar el equipo de la clase al objeto Hibernate AnnotationConfiguration? – Cristian

+0

Creo que lo que quiso decir es agregar el targetEntity en el @ManyToOne (targetEntity = Team.class) –

4

Otra solución: Verifique que la clase referenciada esté incluida en su archivo hibernate.cfg.xml.

10

Junto con la entrada en hibernate.cfg.xml, necesitará la anotación @Entity en la clase a la que se hace referencia.

0

intenta agregar el nombre completo (nombre de clase), al igual que este:

<hibernate-configuration> 
    <session-factory name="java:/hibernate/SessionFactory"> 
        <mapping class="co.com.paq.ClassNAME" /> 
     </session-factory> 
</hibernate-configuration> 

en el archivo:

META-INF/hibernate.cfg.xml 
1

Yo trabajo en un proyecto utilizando Spring e Hibernate 4 y descubrí que hagamos no tenga un archivo hibernate.cfg.xml. En cambio, nuestros frijoles se enumeran en el archivo applicationContext.xml que se parece un poco como

<bean id="sessionFactory" 
class="org.springframework.orm.hibernate4.LocalSessionFactoryBean"> 
    <property name="dataSource"> 
     <ref bean="dataSource" /> 
    </property> 
    <property name="annotatedClasses"> 
     <list> 
      <value>com.package.Bean</value> 
     </list> 
    </property> 
</bean> 

Adición de mi frijol a la lista resolvió el problema. Puede encontrar más información here.

0

Agregue la clase en hibernate.cfg en el orden correcto. Primero mapee el archivo que va a ser referido por otra clase

Cuestiones relacionadas