2010-10-20 11 views
32

Sto ricevendo il seguente Hibernate Eccezione:Hibernate @ManyToOne fa riferimento a un'entità sconosciuta

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

La classe Matchup semplificata appare così:

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

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

La classe team semplificata simile a questa:

@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; 
    } 
} 

Note:

  • Sia Matchup che Team hanno sottoclassi. Non sono sicuro se questo influisce sulla situazione.
  • Sia Matchup che Team sono elencati nel mio persistence.xml come incluso.
  • Se inserisco le annotazioni @Transient su entrambi i metodi getter, l'errore scompare.

Qualcuno può far luce sul motivo per cui questa eccezione si sta verificando?

+0

Hai una tabella TEAM, sì? Sei riuscito a far funzionare qualcosa prima di aver aggiunto @oneToMany? –

risposta

50

Ho capito il problema: non aggiungevo la classe Team all'oggetto Hibernate AnnotationConfiguration. Quindi, Hibernate non stava riconoscendo la classe.

+0

Nel mio caso ho dimenticato @entity Annotation in una classe e ho ricevuto lo stesso messaggio di errore. Inserisco queste informazioni solo se qualcuno ha fatto lo stesso (stupido) bug di me :-) – flipperweid

+2

Puoi descrivere come aggiungere la classe Team all'oggetto Hibernate AnnotationConfiguration? – Cristian

+0

Penso che intendesse aggiungere il targetEntity nel @ManyToOne (targetEntity = Team.class) –

4

Un'altra soluzione: verificare che la classe di riferimento sia inclusa nel file hibernate.cfg.xml.

10

Insieme alla voce in hibernate.cfg.xml, avrete bisogno dell'annotazione @Entity sulla classe di riferimento.

0

provo ad aggiungere il nome completo (className), proprio come questo:

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

nel file:

META-INF/hibernate.cfg.xml 
1

Io lavoro in un progetto utilizzando primavera e Hibernate 4 e ho scoperto che facciamo non abbiamo un file hibernate.cfg.xml. Invece, i nostri fagioli sono elencati nel file applicationContext.xml che sembra un po 'come

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

aggiungendo il mio chicco alla lista risolto il problema. È possibile trovare ulteriori informazioni here.

0

Aggiungere la classe in hibernate.cfg nell'ordine corretto. Prima mappare il file che verrà indirizzato da un'altra classe

Problemi correlati