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.