Kiedy zaktualizowałem wersję Hibernacji z 3.6.8 do 4.0.0, dostałem ostrzeżenie o nieaktualnej metodzie buildSessionFactory()
w tym wierszu:
private static final SessionFactory sessionFactory =
new Configuration().configure().buildSessionFactory();
Javadoc zaleca użycie innej metody
buildSessionFactory(ServiceRegistry serviceRegistry)
ale w dokumentacji znalazłem przestarzały wariant :(
Czy możesz mi pomóc z tym małym nieporozumieniem?
java
hibernate
configuration
deprecated
bootstrapping
pushistyczny
źródło
źródło
Odpowiedzi:
Tak, jest przestarzałe. Zamień swój SessionFactory na:
W Hibernacji 4.0, 4.1, 4.2
W Hibernacji 4.3 ServiceRegistryBuilder jest przestarzały . Zamiast tego użyj następujących.
źródło
Tak, jest przestarzałe. http://docs.jboss.org/hibernate/core/4.0/javadocs/org/hibernate/cfg/Configuration.html#buildSessionFactory () mówi konkretnie, abyś użył innej metody, którą znalazłeś (
buildSessionFactory(ServiceRegistry serviceRegistry)
) - więc użyj jej.Dokumentacja jest kopiowana z wydania na wydanie i prawdopodobnie po prostu nie została jeszcze zaktualizowana (nie przepisują instrukcji przy każdym wydaniu) - więc zaufaj Javadocs.
Szczegóły tej zmiany można zobaczyć na:
Niektóre dodatkowe odniesienia:
źródło
lub
źródło
Kod zweryfikowany do pracy w Hibernacji 4.3.0. Zauważ, że możesz usunąć parametr nazwy pliku XML lub podać własną ścieżkę. Jest to podobne do (ale poprawionych literówek) innych postów tutaj, ale ten jest poprawny.
źródło
To takie proste: dokumenty JBoss nie są w 100% doskonale utrzymane. Idź z tego, co mówi JavaDoc :
buildSessionFactory(ServiceRegistry serviceRegistry)
.źródło
Lepszy sposób na utworzenie obiektu SessionFactory w najnowszej wersji hibernacji 4.3.0 i nowszej jest następujący:
źródło
Nie jest niczym niezwykłym znalezienie rozbieżności między różnymi wersjami dokumentacji. Większość programistów uważa dokumentację za obowiązek i odkłada ją na później.
Zasadniczo, jeśli javadoc mówi jedną rzecz, a niektóre dokumenty inne niż javadoc zaprzeczają temu, istnieje prawdopodobieństwo, że javadoc jest dokładniejszy. Programiści częściej aktualizują javadoc o zmiany w kodzie ... ponieważ „źródło” javadoc znajduje się w tym samym pliku co kod.
W przypadku
@deprecated
tagów wirtualna pewność, że javadoc jest dokładniejsza. Programiści wycofują rzeczy po starannym rozważeniu ... i (ogólnie rzecz biorąc) nie cofają ich.źródło
System.getenv(String)
bugs.sun.com/bugdatabase/view_bug.do?bug_id=4199068Configuration.buildSessionFactory()
;)Jeśli używasz Hibernacji 5.2 i nowszych, możesz użyć tego:
źródło
TL; DR
Tak to jest. Są lepsze sposoby na bootowanie Hibernacji, takie jak następujące.
Hibernacja-natywny bootstrap
Wcześniejszy
Configuration
obiekt jest mniej wydajny niż użycieBootstrapServiceRegistryBuilder
, wprowadzonego od Hibernacji 4:Bootstrap JPA
Możesz także uruchomić Hibernację przy użyciu JPA:
W ten sposób budujesz
EntityManagerFactory
zamiastSessionFactory
. JednakSessionFactory
rozszerza równieżEntityManagerFactory, so the actual object that's built is a
SessionFactoryImpl`.Wniosek
Te dwie metody ładowania mają wpływ na zachowanie Hibernacji. Podczas korzystania z natywnego bootstrapu Hibernacja zachowuje się w starszym trybie, który jest wcześniejszy niż JPA.
Podczas ładowania przy użyciu JPA Hibernacja będzie się zachowywać zgodnie ze specyfikacją JPA.
Istnieje kilka różnic między tymi dwoma trybami:
EntityNotFoundException
, a zatem żądania sprawdzenia bazy danych.źródło
źródło
StandardServiceRegistryBuilder
NIE jest przestarzałe.public void sampleConnection () zgłasza wyjątek {
źródło
Zredagowałem metodę utworzoną przez batbaatar powyżej, więc akceptuje obiekt Configuration jako parametr:
W klasie głównej zrobiłem:
źródło
W Hibernacji 4.2.2
źródło
źródło
oto wiele interfejsów API przestarzałych w hibernowanym środowisku szkieletowym.
stworzyliśmy fabrykę sesji, jak poniżej:
SessionFactory sessionFactory = new Configuration (). Configure (). BuildSessionFactory ();
Metoda buildSessionFactory jest przestarzała z wersji hibernacji 4 i została zastąpiona nowym interfejsem API. Jeśli używasz hibernacji 4.3.0 i nowszych, twój kod musi być:
Konfiguracja konfiguracji = nowa konfiguracja (). Config ();
Konstruktor StandardServiceRegistryBuilder = nowy StandardServiceRegistryBuilder (). ApplySettings (configuration.getProperties ());
SessionFactory factory = configuration.buildSessionFactory (builder.build ());
Klasa ServiceRegistryBuilder została zastąpiona przez StandardServiceRegistryBuilder z 4.3.0. Wygląda na to, że będzie wiele zmian w wersji 5.0. Nadal brak jest jasności w odniesieniu do przestarzałych interfejsów API i odpowiednich alternatyw do użycia. Każda wersja przyrostowa zawiera bardziej przestarzałe API, są one w stanie dopracować podstawową strukturę wydania 5.0.
źródło
W
hibernate 5.3.1
możesz spróbować tego:źródło
Jeśli ktoś tutaj po aktualizacji do 5.1, tak to działa
zamiast poniżej w hibernacji 4.3
źródło
Wystarczy zaimportować następujący pakiet,
źródło