Mysql
 sql >> Base de données >  >> RDS >> Mysql

Hibernate 5 :- org.hibernate.MappingException :Entité inconnue

J'ai corrigé le même problème avec Hibernate 5. Il y a un problème dans ce code

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

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

SessionFactory sf = configuration.buildSessionFactory(sr);

Ce code fonctionne bien pour Hibernate 4.3.5, mais le même code a le même problème pour Hibernate 5.

Lorsque vous faites configuration.buildSessionFactory(sr) , en utilisant Hibernate 5, Configuration perd toutes les informations sur le mappage obtenu par appel configuration.configure() .

Solution

Pour résoudre le problème, si vous utilisez des fichiers de configuration standard hibernate.cfg.xml et hibernate.properties , vous pouvez créer la fabrique de session de cette manière (sans ServiceRegistry )

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

Chargement des propriétés

Si vous avez des propriétés dans un fichier autre que hibernate.properties , vous pouvez créer une usine de session à l'aide de StandardServiceRegistryBuilder (de toute façon, si vous avez hibernate.properties et un autre fichier, il sera chargé tous les deux)

Pour charger des propriétés en tant que ressource

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

Vous devez avoir hibernate-h2.properties dans le chemin de classe (racine du dossier sources, dossier resources). Vous pouvez également spécifier un chemin à partir du dossier source racine /com/github/xxx/model/hibernate-h2.properties .

Pour charger des propriétés à partir d'un chemin dans le système de fichiers

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

Vous pouvez trouver un exemple d'application console utilisant cette approche ici fluent-hibernate-mysql . Il utilise une classe utilitaire pour construire la fabrique de session à partir de la bibliothèque fluent-hibernate .

Tutoriel Hibernate 5 incorrect

Il y a un exemple incorrect dans le tutoriel Hibernate 5 1.1.6. Startup et assistants . Il utilise ce code

 return new Configuration().configure().buildSessionFactory(
                new StandardServiceRegistryBuilder().build() );

Il ne fait pas une configuration correcte.