Поправих същия проблем с Hibernate 5. Има проблем в този код
Configuration configuration = new Configuration();
configuration.configure();
ServiceRegistry sr = new StandardServiceRegistryBuilder().applySettings(
configuration.getProperties()).build();
SessionFactory sf = configuration.buildSessionFactory(sr);
Този код работи добре за Hibernate 4.3.5, но същият код има същия проблем за Hibernate 5.
Когато направите configuration.buildSessionFactory(sr)
, използвайки Hibernate 5, Configuration
губи цялата информация за картографирането, която получава чрез извикване configuration.configure()
.
Решение
За да отстраните проблема, ако използвате стандартни конфигурационни файлове hibernate.cfg.xml
и hibernate.properties
, можете да създадете фабриката за сесии по този начин (без ServiceRegistry
)
SessionFactory sessionFactory = new Configuration().configure().buildSessionFactory();
Свойства се зареждат
Ако имате свойства във файл, различен от hibernate.properties
, можете да изградите фабрика за сесии с помощта на StandardServiceRegistryBuilder
(все пак, ако имате hibernate.properties
и друг файл, той ще бъде зареден и двата)
За да заредите свойства като ресурс
ServiceRegistry serviceRegistry = new StandardServiceRegistryBuilder().
configure().loadProperties("hibernate-h2.properties").build();
SessionFactory sf = new Configuration().buildSessionFactory(serviceRegistry);
Трябва да имате hibernate-h2.properties
в пътя на класа (корен на папката с източници, папка с ресурси). Можете също да посочите път от основната изходна папка/com/github/xxx/model/hibernate-h2.properties
.
За да заредите свойства от път във файловата система
File propertiesPath = new File("some_path");
ServiceRegistry serviceRegistry = new StandardServiceRegistryBuilder().
configure().loadProperties(propertiesPath).build();
SessionFactory sf = new Configuration().buildSessionFactory(serviceRegistry);
Можете да намерите примерно конзолно приложение, използвайки този подход тук fluent-hibernate-mysql . Той използва помощен клас за изграждане на фабриката за сесии от библиотеката fluent-hibernate .
Неправилен урок за Hibernate 5
В урока за Hibernate 5 има неправилен пример 1.1.6. Стартиране и помощници . Той използва този код
return new Configuration().configure().buildSessionFactory(
new StandardServiceRegistryBuilder().build() );
Не прави правилна конфигурация.