web-dev-qa-db-fra.com

Hibernate @ManyToOne fait référence à une entité inconnue

Je reçois l'exception Hibernate suivante:

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

La classe Matchup simplifiée ressemble à ceci:

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

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

La classe d'équipe simplifiée ressemble à ceci:

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

Remarques:

  • Matchup et Team ont tous deux des sous-classes. Je ne suis pas sûr que cela affecte la situation.
  • Matchup et Team sont répertoriés dans mon persistence.xml comme étant Inclus.
  • Si je mets des annotations @Transient sur les deux méthodes getter, l'erreur Disparaît.

Quelqu'un peut-il expliquer pourquoi cette exception se produit?

37
user482368

J'ai résolu le problème: je n'ajoutais pas la classe Team à l'objet Hibernate AnnotationConfiguration. Ainsi, Hibernate ne reconnaissait pas la classe. 

60
user482368

En plus de l'entrée dans hibernate.cfg.xml, vous aurez besoin de l'annotation @Entity sur la classe référencée.

17
Summer

Une autre solution: vérifiez que la classe référencée est incluse dans votre fichier hibernate.cfg.xml.

4
TomKim

Je travaille dans un projet utilisant Spring et Hibernate 4 et j'ai découvert que nous avions pas un fichier hibernate.cfg.xml. Au lieu de cela, nos beans sont listés dans le fichier applicationContext.xml qui ressemble un peu à

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

L'ajout de mon haricot à la liste a résolu le problème. Vous pouvez trouver plus d'informations ici .

3
Monkey Supersonic

Essayez d’ajouter le nom qualifié (ClassNAME), comme ceci:

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

Dans le fichier:

META-INF/hibernate.cfg.xml
0
user3487222

J'ai eu le même problème et je me débattais depuis deux heures. J'ai finalement découvert que la valeur de la propriété packageToscan et le nom du package lui-même étaient incompatibles entre les majuscules et les minuscules .. Le package était en majuscule (DAO) et que le packageToscan avait la valeur dao. je voulais juste ajouter cela dans le cas où quelqu'un trouve l'aide complète

0
Yogesh Kumar Gupta

Ajoutez la classe dans hibernate.cfg dans le bon ordre. D'abord mapper le fichier qui va être référé par une autre classe

0
manjari.rastogi