it-swarm.com.de

Hibernate @ManyToOne verweist auf eine unbekannte Entität

Ich erhalte die folgende Hibernate-Ausnahme:

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

Die vereinfachte Matchup-Klasse sieht folgendermaßen aus:

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

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

Die vereinfachte Teamklasse sieht folgendermaßen aus:

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

Anmerkungen:

  • Sowohl Matchup als auch Team haben Unterklassen. Ich bin nicht sicher, ob dies die Situation beeinflusst.
  • Sowohl Matchup als auch Team sind in meiner persistence.xml als Enthalten.
  • Wenn ich @Transient-Annotationen für beide Getter-Methoden setze, verschwindet der Fehler

Kann jemand wissen, warum diese Ausnahme auftritt?

37
user482368

Ich habe das Problem herausgefunden: Ich habe der Hibernate-Variable AnnotationConfiguration keine Klasse hinzugefügt. Daher erkannte Hibernate die Klasse nicht. 

60
user482368

Neben dem Eintrag in hibernate.cfg.xml benötigen Sie die @Entity-Annotation für die referenzierte Klasse.

17
Summer

Eine andere Lösung: Stellen Sie sicher, dass die hibernate.cfg.xml-Datei die referenzierte Klasse enthält.

4
TomKim

Ich arbeite in einem Projekt, das Spring und Hibernate 4 verwendet, und ich fand heraus, dass wir not keine hibernate.cfg.xml-Datei haben. Stattdessen sind unsere Beans in der Datei applicationContext.xml aufgelistet, die ein bisschen aussieht

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

Das Hinzufügen meiner Bohne zur Liste löste das Problem. Weitere Informationen finden Sie hier .

3

Wenn Sie den Parameter hibernate.cfg.xml Nicht verwenden, können Sie den Parameter targetEntity in der Annotation @ManyToOne/@OneToMany Mit der Klasse hinzufügen, die Ihre Entität beschreibt.

Zum Beispiel:

@ManyToOne(targetEntity = some.package.MyEntity.class)
2
Den Dee

Versuchen Sie, den qualifizierten Namen (ClassNAME) wie folgt hinzuzufügen:

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

In der Datei:

META-INF/hibernate.cfg.xml
0
user3487222

Ich hatte das gleiche Problem und hatte in den letzten Stunden Probleme damit. Ich fand schließlich heraus, dass der Wert in der packageToscan-Eigenschaft und der tatsächliche Paketname die Groß-/Kleinschreibung hatten. Das Paket war in Großbuchstaben (DAO) und der packageToscan hatte dao als Wert. Ich wollte das nur hinzufügen, falls jemand es für hilfreich hält

0

Fügen Sie die Klasse in hibernate.cfg in der richtigen Reihenfolge hinzu. Ordnen Sie zuerst die Datei zu, die von einer anderen Klasse referenziert werden soll

0
manjari.rastogi