Maison >base de données >tutoriel mysql >Erreur Hibernate 5 « Entité inconnue » : comment configurer correctement SessionFactory pour le mappage d'entités ?

Erreur Hibernate 5 « Entité inconnue » : comment configurer correctement SessionFactory pour le mappage d'entités ?

Linda Hamilton
Linda Hamiltonoriginal
2024-12-15 03:45:23440parcourir

Hibernate 5

Hibernate 5 : résolution de l'erreur « Entité inconnue » lors de l'intégration

Lors de la tentative d'intégration d'Hibernate 5.0 avec MySQL, de nombreux développeurs rencontrent le message d'erreur "org.hibernate.MappingException : entité inconnue." Ce problème survient spécifiquement avec les versions 5.0.0 et 5.0.1 d'Hibernate, alors que les versions précédentes telles que la 4.3.9 fonctionnent correctement.

Définition du problème

L'"entité inconnue" " L'erreur se produit lorsqu'Hibernate ne parvient pas à reconnaître la classe annotée en tant qu'entité. Cela peut se produire si les métadonnées de mappage de la classe ne sont pas correctement configurées ou ajoutées à la configuration Hibernate.

Détails de configuration

Les dépendances Maven fournies et hibernate.cfg. La configuration XML semble être correcte. La classe User est également annotée en tant qu'entité et a été mappée à la table de base de données "User_table".

Cause et solution

La cause première de ce problème réside dans le processus de création de SessionFactory dans la classe HibernateMain. Dans Hibernate 5, le code suivant est utilisé pour configurer et construire SessionFactory :

Configuration configuration = new Configuration();
configuration.configure();

ServiceRegistry sr = new StandardServiceRegistryBuilder().applySettings(
    configuration.getProperties()).build();

SessionFactory sf = configuration.buildSessionFactory(sr);

Le problème survient car l'utilisation de configuration.buildSessionFactory(sr) dans Hibernate 5 entraîne la perte des informations de mappage obtenues en appelant la configuration. configuration.configure(). Par conséquent, Hibernate est incapable de reconnaître la classe User comme une entité annotée.

Solution

Pour résoudre ce problème, il existe deux approches :

Utilisation des fichiers de configuration standard (hibernate.cfg.xml et hibernate.properties)

Si vous utilisez des fichiers de configuration standard, vous pouvez créer SessionFactory sans utiliser ServiceRegistry.

SessionFactory sessionFactory = new Configuration().configure().buildSessionFactory();

Chargement des propriétés

Si vous avez des propriétés dans un fichier séparé, vous pouvez les charger et créer la SessionFactory en utilisant StandardServiceRegistryBuilder.

Chargement des propriétés en tant que ressource

ServiceRegistry serviceRegistry = new StandardServiceRegistryBuilder().
    configure().loadProperties("hibernate-h2.properties").build();
SessionFactory sf = new Configuration().buildSessionFactory(serviceRegistry);

Chargement des propriétés à partir d'un chemin

File propertiesPath = new File("some_path");
ServiceRegistry serviceRegistry = new StandardServiceRegistryBuilder().
    configure().loadProperties(propertiesPath).build();
SessionFactory sf = new Configuration().buildSessionFactory(serviceRegistry);

Notes supplémentaires

  • L'exemple de tutoriel dans la documentation Hibernate 5 (1.1.6 Démarrage et assistants) fournit un exemple incorrect qui n'effectue pas une configuration correcte.
  • L'utilisation d'un code incorrect peut entraîner l'erreur « Entité inconnue ».

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn