8
votes

org.hibernate.AnnotationException: @Eonetoone ou @manytoone sur Références une entité inconnue

Je reçois l'exception hibernate suivante: XXX

Après environ 20 heures consacrées au problème avec diverses personnes, ayant lu chaque blog ou forum possible, je suis vraiment désespéré ici. < / p>

Il s'agit d'un projet de taille moyenne. Je devrais mentionner que la base de données est Postgres 9.1 et nous générons le DB à l'aide d'un outil de modélisation. Hibernate se connecte à la base de données mais ne le génère pas.

J'ai créé une nouvelle entité dans la base de données, elle s'appelle "konfiguracnitemplate" (modèle de configuration). J'ai créé le modèle, le contrôleur, le formulaire, les validateurs, .jsp, tous essentiellement copiés 1: 1 d'une entité existante de nature similaire. Je peux maintenant travailler avec konfiguracnitemplate, CRUD fonctionne entièrement.

Le problème vient lorsque je réfère ce konfiguracnitemplate de l'entité appelée Switchport. Dans la DB, il y a une relation entre les deux:

  • Switchport 1: 1 ... 0: N Konfiguracnitemplate (Switchport fait toujours référence à un konfiguracnitemplate; un konfiguracnitemplate peut être référencé à zéro ou plus)
  • Switchport a FK KonfiguracnitemplplateACCESS_ID pour cette relation.

    in ... / modèle / switchport.java La relation est mappée comme toutes les autres relations qui fonctionnent: xxx

    J'ai essayé divers formes : xxx

    ou xxx

    J'ai également vérifié:

    • Les deux entités sont dans le même paquet
    • Ils sont tous deux annotés "@entity" en utilisant "import javax.persistence.entity;"
    • La construction ne produit aucune erreur / message d'avertissement
    • Tant que la référence à Switchport est commentée, tout va bien

      Peu importe ce que j'essaie, je ne peux pas vous débarrasser des "références d'une entité inconnue". Quelqu'un peut-il partager une idée de ce qui se passe ou peut-être comment déboguer le problème? The StackTrace en haut de la poste est tout ce que je regrette dans les journaux.

      Toutes les entrées sont grandement appréciées!


5 commentaires

Est-ce que cela se produit après une construction ou un développement? Est-ce que vos tests de l'unité sont exécutés?


Ceci est une exception d'exécution. La construction réussit, après cela, je peux accéder au formulaire de connexion, soumettre et je reçois l'exception. Nous ne faisons pas de tests unitaires.


Avez-vous vérifié votre bocal et assurez-vous que le fichier de classe pour la classe manquante est présent dans le pot après la construction?


Nous nous engageons toujours envers SVN de Netbeans et utilisons Hudson pour construire le projet et déployer sur Tomcat. Le projet finit dans un seul fichier .war. BTW Je peux utiliser l'entité KonfiguracnitemPlapper à tout simplement bien. Cependant, je ne peux pas y référer à l'entité SwistPort.


Est konfiguracnitemplate référencé dans votre hibernate.config.xml / persistence.xml?


9 Réponses :


1
votes

a finalement eu la solution d'un autre développeur de l'équipe!

Les classes doivent être importées avant la création de l'objet SéditionFactory. Ici, l'importation pour la nouvelle classe était manquante, il était donc inconnu de l'objet de sessionFactory.

Quoi qu'il en soit, merci à tout le monde pour vos allusions!


1 commentaires

Comment avez-vous résolu ce problème? Quel fichier avez-vous modifié? Pouvez-vous mettre en détail plus en détail sur ce que vous avez fait exactement.



10
votes

Il suffit d'ajouter la classe équipe au fichier " hibernate-cfg.xml ", car hibernate n'identifie pas sans y ajouter.


1 commentaires

Dans mon cas dans mon hibernateconfig.java



0
votes

Il y a une autre chance d'obtenir une telle exception; Lorsque vous ne mentionnez pas votre classe de mappage dans le fichier hibernate.cfg.xml. Comme mentionné ci-dessus.


0 commentaires

2
votes

Solutions possibles:

1) Assurez-vous que l'entité a été référencée de manière appropriée dans hibernate.cfg.xml xxx

2) Assurez-vous Cette @entity a été spécifiée au niveau de la classe (en haut de la classe) xxx


0 commentaires

0
votes

J'avais la même exception ... je viens d'oublier d'ajouter une annotation ( @entity et @Table ) sur la classe maître (classe avec clé primaire)

SOOL SOOL SOOL Vérifiez chaque annotation de vos entités, je veux dire non seulement @manytoone et @onetomany comme je l'ai fait.


0 commentaires

2
votes

Je viens d'avoir ce problème, avec entité A entité de référencement B . Les deux entités étaient situées dans un pot commun en dehors du projet Web que je travaillais; A a été déclaré dans persistance.xml mais b n'était pas. I Mettez B dans un tag in persistence.xml et cela a fonctionné!


1 commentaires

Merci @nick. Vous avez sauvé ma vie.



1
votes

J'ai rencontré ce problème lors de l'utilisation du ressort et non d'utiliser le fichier hibernate.cfg.xml . Il a été résolu en ajoutant le nom du package entièrement qualifié du modèle Classe à la méthode Setpackagestoscan de LOCALALSESSPACTORYBEAN Classe.


0 commentaires

0
votes

Si vous avez deux entités dans différents projets, vous pouvez numériser le package de KonfiguracnitemPate dans d'autres projets. Vous pouvez faire comme ceci dans le démarrage de printemps

@EnttityScan ({"com.thispackage.entity", "com.konfiguracnitemplatepackage.entity"})


0 commentaires

0
votes

Je vais vous donner une solution qui devrait fonctionner pour la même erreur avec Spring Boot . Cela a moins à voir avec la question initiale, mais aujourd'hui, les gens chercheraient probablement cette réponse, car personne n'utilise plus la configuration XML aujourd'hui.

J'ai subi le même problème et j'ai trouvé la solution sur ce site Web: https: //www.programmersoughers .com / article / 1617314625 /

Il décrit même cette question même qu'il aurait levé debout, mais je me demande alors: pourquoi n'avait-il pas répondu ici après avoir trouvé la solution? Lol

Ses propres mots:

Dans le projet de démarrage à ressort, le package de numérisation par défaut est le package où se trouve la méthode principale, c'est-à-dire uniquement les classes d'entité dans le même package que la méthode principale sera découvert . De cette façon, vous pouvez comprendre pourquoi l'utilisateur n'est pas trouvé: car l'utilisateur est une classe d'entité dans un autre module. Le démarche de printemps ne change pas d'autres packages du tout; Configurez le @springbooTaplication Annotation sur la méthode principale qui lance l'application, indiquant le démarrage du ressort que ces packages doivent être numérisés: @springbootaPlication (scanbasepackages = {"com.xiaomo. *"}) Ensuite, l'utilisateur peut être trouvé.

Vous avez donc essentiellement reconfigurer Springboot pour numériser davantage de forfaits pour inclure les autres.

Mon ajout personnel: Vous pouvez également déplacer vos paquets dans le paquet où se trouve le démarreur ou déplacez le démarreur un colis vers le haut (c'est ce que j'ai fait).


0 commentaires