Opravil jsem stejný problém s Hibernate 5. V tomto kódu je problém
Configuration configuration = new Configuration();
configuration.configure();
ServiceRegistry sr = new StandardServiceRegistryBuilder().applySettings(
configuration.getProperties()).build();
SessionFactory sf = configuration.buildSessionFactory(sr);
Tento kód funguje dobře pro Hibernate 4.3.5, ale stejný kód má stejný problém pro Hibernate 5.
Když provedete configuration.buildSessionFactory(sr)
, pomocí Hibernate 5, Configuration
ztratí všechny informace o mapování, které získá voláním configuration.configure()
.
Řešení
Chcete-li problém vyřešit, použijte standardní konfigurační soubory hibernate.cfg.xml
a hibernate.properties
, můžete tímto způsobem vytvořit továrnu relace (bez ServiceRegistry
)
SessionFactory sessionFactory = new Configuration().configure().buildSessionFactory();
Načítání vlastností
Pokud máte v souboru jiné vlastnosti než hibernate.properties
, můžete sestavit továrnu relací pomocí StandardServiceRegistryBuilder
(v každém případě, pokud máte hibernate.properties
a další soubor, budou načteny oba)
Chcete-li načíst vlastnosti jako zdroj
ServiceRegistry serviceRegistry = new StandardServiceRegistryBuilder().
configure().loadProperties("hibernate-h2.properties").build();
SessionFactory sf = new Configuration().buildSessionFactory(serviceRegistry);
Musíte mít hibernate-h2.properties
v cestě třídy (kořen složky zdrojů, složka zdrojů). Můžete také zadat cestu z kořenové zdrojové složky/com/github/xxx/model/hibernate-h2.properties
.
Chcete-li načíst vlastnosti z cesty v systému souborů
File propertiesPath = new File("some_path");
ServiceRegistry serviceRegistry = new StandardServiceRegistryBuilder().
configure().loadProperties(propertiesPath).build();
SessionFactory sf = new Configuration().buildSessionFactory(serviceRegistry);
Příklad konzolové aplikace využívající tento přístup naleznete zde fluent-hibernate-mysql . K sestavení továrny relací z knihovny fluent-hibernate používá třídu utility. .
Nesprávný výukový program Hibernate 5
Ve výukovém programu Hibernate 5 je nesprávný příklad 1.1.6. Spuštění a pomocníci . Používá tento kód
return new Configuration().configure().buildSessionFactory(
new StandardServiceRegistryBuilder().build() );
Neprovádí správnou konfiguraci.