Als ich die Hibernate-Version von 3.6.8 auf 4.0.0 aktualisiert habe, wurde buildSessionFactory()
in dieser Zeile eine Warnung bezüglich einer veralteten Methode angezeigt :
private static final SessionFactory sessionFactory =
new Configuration().configure().buildSessionFactory();
Der Javadoc empfiehlt die Verwendung einer anderen Methode
buildSessionFactory(ServiceRegistry serviceRegistry)
aber in der Dokumentation fand ich veraltete Variante :(
Können Sie mir bei diesem kleinen Missverständnis helfen?
java
hibernate
configuration
deprecated
bootstrapping
pushistisch
quelle
quelle
Antworten:
Ja, es ist veraltet. Ersetzen Sie Ihre SessionFactory durch Folgendes:
In Hibernate 4.0, 4.1, 4.2
In Hibernate 4.3 ist ServiceRegistryBuilder veraltet . Verwenden Sie stattdessen Folgendes.
quelle
Ja, es ist veraltet. http://docs.jboss.org/hibernate/core/4.0/javadocs/org/hibernate/cfg/Configuration.html#buildSessionFactory () weist Sie ausdrücklich an, die andere Methode zu verwenden, die Sie stattdessen gefunden haben (
buildSessionFactory(ServiceRegistry serviceRegistry)
) - verwenden Sie sie also.Die Dokumentation wird von Release zu Release kopiert und wahrscheinlich noch nicht aktualisiert (das Handbuch wird nicht bei jedem Release neu geschrieben) - vertrauen Sie also den Javadocs.
Die Einzelheiten dieser Änderung können unter folgender Adresse eingesehen werden:
Einige zusätzliche Referenzen:
quelle
oder
quelle
Code wurde überprüft, um in Hibernate 4.3.0 zu funktionieren. Beachten Sie, dass Sie den XML-Dateinamenparameter entfernen oder dort Ihren eigenen Pfad angeben können. Dies ist ähnlich (aber Tippfehler korrigiert) anderen Posts hier, aber dieser ist korrekt.
quelle
So einfach ist das: Die JBoss-Dokumente sind nicht zu 100% perfekt gepflegt. Gehen Sie mit dem, was der JavaDoc sagt :
buildSessionFactory(ServiceRegistry serviceRegistry)
.quelle
Ein besserer Weg, um ein SessionFactory- Objekt in der neuesten Version 4.3.0 für den Ruhezustand zu erstellen, ist folgender:
quelle
Es ist nicht ungewöhnlich, Diskrepanzen zwischen verschiedenen Dokumentationsversionen zu finden. Die meisten Entwickler betrachten Dokumentation als lästige Pflicht und neigen dazu, sie zu verschieben.
Als Faustregel gilt: Wenn der Javadoc eine Sache sagt und eine Nicht-Javadoc-Dokumentation dem widerspricht, besteht die Möglichkeit, dass der Javadoc genauer ist. Programmierer halten das Javadoc mit größerer Wahrscheinlichkeit über Änderungen am Code auf dem Laufenden ... da sich die "Quelle" für das Javadoc in derselben Datei wie der Code befindet.
Bei
@deprecated
Tags ist es eine virtuelle Gewissheit, dass das Javadoc genauer ist. Entwickler lehnen Dinge nach sorgfältiger Überlegung ab ... und (im Allgemeinen) sie missbilligen sie nicht.quelle
System.getenv(String)
bugs.sun.com/bugdatabase/view_bug.do?bug_id=4199068Configuration.buildSessionFactory()
;)Wenn Sie Hibernate 5.2 und höher verwenden, können Sie Folgendes verwenden:
quelle
TL; DR
Ja, so ist es. Es gibt bessere Möglichkeiten, den Ruhezustand zu booten, wie die folgenden.
Eingeborener Bootstrap im Ruhezustand
Das Legacy-
Configuration
Objekt ist weniger leistungsfähig als dasBootstrapServiceRegistryBuilder
seit Hibernate 4 eingeführte:JPA-Bootstrap
Sie können den Ruhezustand auch mit JPA booten:
Auf diese Weise bauen Sie das
EntityManagerFactory
anstelle einesSessionFactory
. DasSessionFactory
erweitert jedoch auch dieEntityManagerFactory, so the actual object that's built is a
SessionFactoryImpl`.Fazit
Diese beiden Bootstrapping-Methoden wirken sich auf das Verhalten im Ruhezustand aus. Bei Verwendung des nativen Bootstraps verhält sich der Ruhezustand im Legacy-Modus, der vor JPA liegt.
Beim Bootstrapping mit JPA verhält sich der Ruhezustand gemäß der JPA-Spezifikation.
Es gibt verschiedene Unterschiede zwischen diesen beiden Modi:
EntityNotFoundException
und fordert daher eine DB-Prüfung.quelle
quelle
StandardServiceRegistryBuilder
ist NICHT veraltet.public void sampleConnection () löst eine Ausnahme aus {
quelle
Ich habe die oben von batbaatar erstellte Methode so bearbeitet, dass das Konfigurationsobjekt als Parameter akzeptiert wird:
In der Hauptklasse habe ich gemacht:
quelle
Im Ruhezustand 4.2.2
quelle
quelle
Hier sind viele APIs im Ruhezustand-Kernframework veraltet.
Wir haben die Session Factory wie folgt erstellt:
SessionFactory sessionFactory = new Configuration (). Configure (). BuildSessionFactory ();
Die Methode buildSessionFactory ist in der Version 4 für den Ruhezustand veraltet und wird durch die neue API ersetzt. Wenn Sie den Ruhezustand 4.3.0 und höher verwenden, muss Ihr Code wie folgt lauten:
Konfigurationskonfiguration = neue Konfiguration (). Configure ();
Builder StandardServiceRegistryBuilder = new StandardServiceRegistryBuilder (). ApplySettings (configuration.getProperties ());
SessionFactory factory = configuration.buildSessionFactory (builder.build ());
Die Klasse ServiceRegistryBuilder wird ab 4.3.0 durch StandardServiceRegistryBuilder ersetzt. Es sieht so aus, als ob es in der Version 5.0 viele Änderungen geben wird. Es gibt immer noch nicht viel Klarheit über die veralteten APIs und die geeigneten Alternativen. Jede inkrementelle Version enthält eine veraltete API. Sie dient der Feinabstimmung des Kernframeworks für Version 5.0.
quelle
In
hibernate 5.3.1
können Sie dies versuchen:quelle
Wenn jemand nach dem Update auf 5.1 hier ist, funktioniert das so
anstelle der folgenden im Ruhezustand 4.3
quelle
Einfach folgendes Paket importieren,
quelle