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