Naprawiłem ten sam problem w Hibernate 5. Wystąpił problem w tym kodzie
Configuration configuration = new Configuration();
configuration.configure();
ServiceRegistry sr = new StandardServiceRegistryBuilder().applySettings(
configuration.getProperties()).build();
SessionFactory sf = configuration.buildSessionFactory(sr);
Ten kod działa dobrze dla Hibernate 4.3.5, ale ten sam kod ma ten sam problem dla Hibernate 5.
Kiedy robisz configuration.buildSessionFactory(sr)
, używając Hibernate 5, Configuration
traci wszystkie informacje o mapowaniu, które są pobierane przez wywołanie configuration.configure()
.
Rozwiązanie
Aby rozwiązać ten problem, jeśli używasz standardowych plików konfiguracyjnych hibernate.cfg.xml
i hibernate.properties
, możesz w ten sposób stworzyć fabrykę sesji (bez ServiceRegistry
)
SessionFactory sessionFactory = new Configuration().configure().buildSessionFactory();
Wczytywanie właściwości
Jeśli masz właściwości w pliku innym niż hibernate.properties
, możesz zbudować fabrykę sesji za pomocą StandardServiceRegistryBuilder
(w każdym razie, jeśli masz hibernate.properties
i inny plik, zostanie załadowany oba)
Aby załadować właściwości jako zasób
ServiceRegistry serviceRegistry = new StandardServiceRegistryBuilder().
configure().loadProperties("hibernate-h2.properties").build();
SessionFactory sf = new Configuration().buildSessionFactory(serviceRegistry);
Musisz mieć hibernate-h2.properties
w ścieżce klasy (główny folder źródeł, folder zasobów). Możesz również określić ścieżkę z głównego folderu źródłowego/com/github/xxx/model/hibernate-h2.properties
.
Aby załadować właściwości ze ścieżki w systemie plików
File propertiesPath = new File("some_path");
ServiceRegistry serviceRegistry = new StandardServiceRegistryBuilder().
configure().loadProperties(propertiesPath).build();
SessionFactory sf = new Configuration().buildSessionFactory(serviceRegistry);
Przykładową aplikację konsolową korzystającą z tego podejścia znajdziesz tutaj fluent-hibernate-mysql . Używa klasy narzędziowej do zbudowania fabryki sesji z biblioteki fluent-hibernate .
Niepoprawny samouczek Hibernacji 5
W samouczku Hibernate 5 znajduje się niepoprawny przykład 1.1.6. Uruchomienie i pomocnicy . Używa tego kodu
return new Configuration().configure().buildSessionFactory(
new StandardServiceRegistryBuilder().build() );
Nie wykonuje prawidłowej konfiguracji.