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:
Kann jemand wissen, warum diese Ausnahme auftritt?
Ich habe das Problem herausgefunden: Ich habe der Hibernate-Variable AnnotationConfiguration
keine Klasse hinzugefügt. Daher erkannte Hibernate die Klasse nicht.
Neben dem Eintrag in hibernate.cfg.xml benötigen Sie die @Entity
-Annotation für die referenzierte Klasse.
Eine andere Lösung: Stellen Sie sicher, dass die hibernate.cfg.xml
-Datei die referenzierte Klasse enthält.
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 .
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)
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
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
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