wake-up-neo.com

Was ist neu in Hibernate ORM 5?

Ich habe gerade gesehen, dass der vierte Kandidat für Hibernate 5 veröffentlicht wurde. Was ist neu in 5 im Vergleich zu früheren Versionen?

51

In Hibernate 5.x wurden einige aufregende Funktionen hinzugefügt/verbessert. Schau mal kurz rein.

1. Suche im Ruhezustand

Hibernate Search indiziert Ihre Objekte transparent und bietet eine schnelle reguläre Volltext- und Geolocation-Suche. Benutzerfreundlichkeit und einfaches Clustering sind das A und O.

  • Volltextsuche nach Entitäten - näherungsweise finden (Fuzzy-Suche)
  • Cluster-freundlich - bietet mehrere einfach einzurichtende Cluster-Strategien
  • Facettierung und Geolokalisierung - Geolokalisierte Objekte sind so einfach wie @Spatial

Weitere Informationen zur Suche im Ruhezustand finden Sie hier.

2. Ruhezustand prüfen

Hibernate Validator enthält eine Handvoll integrierter Validierungsregeln wie E-Mail, Länge, NotBlank usw.

Drücken Sie Validierungsregeln standardisiert mit auf Anmerkungen basierenden Einschränkungen aus und profitieren Sie von der transparenten Integration in eine Vielzahl von Frameworks.

Weitere Informationen zur Ruhezustandsüberprüfung finden Sie hier.

3. Verbesserte Java 8 Unterstützung

Java 8-Datentypen für Datum und Uhrzeit (JSR 310) werden unterstützt und können über @Past und @Future validiert werden. Auch optionale und JavaFX-Typen werden über einen verbesserten ValidatedValueUnwrapper unterstützt.

4. OGM in den Ruhezustand versetzen

Habe gerade die erste stabile Version veröffentlicht.

5. Bootstrapping-API

Neue Bootstrapping-API - Besserer Determinismus, bessere Integration


Ein paar andere Dinge:

  • Scan-Unterstützung für Nicht-JPA-Verwendung
  • NamingStrategy wurde zugunsten einer besser gestalteten API entfernt
  • Möglichkeit, zusätzliche Java Typen für ID-Attribute zu verarbeiten, die als GenerationType # AUTO gekennzeichnet sind. Integrierte Unterstützung für Number und UUID. Erweiterbar über die neue org.hibernate.boot.model.IdGeneratorStrategyInterpreter-Erweiterung.
  • Außerdem wurde die Unterstützung für AttributeConverter erweitert und umfassender umgesetzt

Überprüfen Sie Hibernate ORM Roadmap für weitere Details.

46
Bacteria

In Hibernate 5 gibt es eine lange Liste von Änderungen:

  1. Neue bootstrap API, damit wir eine JPA-Umgebung programmgesteuert booten können, ohne dass eine persistence.xml - Datei erforderlich ist .

  2. Ab 5.0 ist Hibernate Spatial Teil des Hibernate-Projekts, sodass wir auch GIS-Daten verarbeiten können.

  3. Die Java 8-Typen für Datum und Uhrzeit werden in Domänenmodellzuordnungen unterstützt. Die Zuordnung zwischen den Standard-SQL-Datums-/Uhrzeit-Typen und den unterstützten Java 8 Datums-/Uhrzeit-Klassentypen sieht wie folgt aus.

    • DATUM: Java.time.LocalDate
    • ZEIT: Java.time.LocalTime, Java.time.OffsetTime
    • TIMESTAMP: Java.time.Instant, Java.time.LocalDateTime, Java.time.OffsetDateTime Und Java.time.ZonedDateTime
  4. Der Mechanismus zur Verbesserung des Bytecodes wurde von Grund auf neu gestaltet, und Hibernate enthält sowohl ein Maven- als auch ein Gradle-Plugin. Es gibt drei Hauptaspekte, die wir mit der Bytecode-Instrumentierung verbessern können:

    • Lazy Initialization: Felder können als LAZY deklariert werden und werden nur beim ersten Zugriff abgerufen.

    • Dirty Checking: Entitäten wurden so erweitert, dass sie alle Eigenschaften verfolgen können, die nach dem Laden in einen Persistenzkontext geändert wurden.

    • Bidirektionale Assoziationen: Es ist möglich, beide Seiten einer bidirektionalen Assoziation automatisch zu synchronisieren, selbst wenn der Entwickler nur eine Seite aktualisiert.

  5. Die nativen APIs von Hibernate (Session usw.) wurden aktualisiert und verwenden nun generische Typen. Beim Abrufen von Entities muss kein Cast ausgeführt werden.

  6. Hibernate 5.0 erweitert dies auf einen breiteren Satz von Typen (z. B. UUID).

  7. Cache der zweiten Ebene als Referenz. Diese Funktion ermöglicht das direkte Speichern von Entitätsreferenzen in den Cache der zweiten Ebene für unveränderliche Entitäten.

  8. Ab Hibernate 5.0 haben wir ein vollständiges neues Benutzerhandbuch , das von Grund auf neu geschrieben wurde.

Hibernate 5.1 fügt die folgenden Funktionen hinzu:

  1. Sie können jetzt in JPQL- und HQL-Abfragen nicht verwandte Entitäten verbinden
  2. Laden mehrerer Entitäten nach Identifikator

Ruhezustand 5.2 fügt Unterstützung für Folgendes hinzu:

  1. Java 1.8, also Sie können jetzt Query.stream() verwenden
  2. Der Ruhezustand Session erweitert EntityManager, sodass Sie direkt von einem Session aus auf alle JPA-Methoden zugreifen können.
  3. Unterstützung für JCache
  4. Stapelgröße auf Sitzungsebene
  5. Globale Zeitzoneneinstellung (z. B. UTC) für Timestamp und Time
  6. Eindeutiger Pass-Through-Hinweis
  7. Effizienteres Parsen konstanter Werte in JPQL und HQL
  8. Die hibernate.connection.provider_disables_autocommit Ressourcenlokale Transaktionsoptimierung .
  9. Besserer Umgang mit Kriterien-API-Literalen .
42
Vlad Mihalcea

In Hibernate 5 gibt es 5 neue Funktionen

1. Unterstützungsklassen der Datums- und Uhrzeit-API als BasicTypes Die neue Datums- und Uhrzeit-API war eine der am meisten erwarteten Änderungen in Java 8. Die alte Java.util .Date hat eine Menge Probleme, die endlich behoben wurden.

Leider bieten JPA 2.1 und Hibernate 4 keine direkte Unterstützung dafür. Aber das ist kein großes Problem. Es sind nur ein paar Codezeilen erforderlich, um einen AttributeConverter zu implementieren, der ein LocalDate abbildet.

Aber offensichtlich ist die explizite Unterstützung als BasicType noch viel besser. Hibernate hat dies in Version 5.0 implementiert. Seitdem benötigen Sie keine zusätzlichen Anmerkungen oder Konverter, um die Klassen der Datums- und Uhrzeit-API beizubehalten. Sie können sie wie alle anderen unterstützten Attributtypen verwenden.

2. Abfrageergebnisse als Stream abrufen Die Einführung einer neuen Methode, mit der Sie Ihre Abfrageergebnisse als Stream anzeigen können, klingt nicht nach einer großen Sache. Die Stream-Methode der Hibernate-Abfrageoberfläche bietet jedoch einen zusätzlichen Vorteil, der sie besonders für große Ergebnismengen interessant macht. Es ruft die Ergebnismenge in mehreren Stapeln ab und verwendet die ScrollableResults-Implementierung von Hibernate, um einen Bildlauf durchzuführen. Dieser Ansatz eignet sich hervorragend, wenn Sie einen Stream verwenden, um die Ergebnismengen-Datensätze nacheinander zu verarbeiten, und hilft Ihnen dabei, Ihren Anwendungsfall effizient zu implementieren.

Sie können die neue Methode seit Hibernate 5.2 verwenden, um Ihre Abfrageergebnisse abzurufen. Der folgende Codeausschnitt zeigt ein einfaches Beispiel, in dem alle Book-Entitäten aus der Datenbank ausgewählt und als Stream verarbeitet werden.

3. Abrufen mehrerer Entitäten anhand ihres Primärschlüssels

Das Abrufen mehrerer Entitäten anhand ihrer ID ist ein sehr häufiger Anwendungsfall. Die meisten Entwickler implementieren sie entweder mit einer Schleife, die die find-Methode des EntityManager für jeden Primärschlüssel aufruft, oder mit einer JPQL-Abfrage, die alle Primärschlüsselwerte in einer IN-Klausel überprüft. Bei der ersten Option muss Hibernate für jeden Primärschlüssel eine Datenbankabfrage durchführen. Dies kann zu erheblichen Leistungsproblemen führen. Die zweite Option ermöglicht das Abrufen aller Entitäten mit einer Abfrage und ist offensichtlich die bessere Option.

In Hibernate 5.1 wurde eine dritte Option eingeführt, die die Probleme der ersten vermeidet und einfacher zu verwenden ist als die zweite. Die neue MultiIdentifierLoadAccess-Schnittstelle bietet eine komfortable Möglichkeit, mehrere Entitäten mit einer Abfrage zu laden. Sie müssen nur die byMultipleIds-Methode in der Hibernate-Sitzung aufrufen, um eine MultiIdentifierLoadAccess-Schnittstelle abzurufen und eine Liste der Primärschlüsselwerte für die multiLoad-Methode bereitzustellen. Die Implementierung von Hibernate bietet außerdem einen zusätzlichen Vorteil: Sie teilt große Listen von Primärschlüsselwerten in mehrere Stapel auf. Dies ist manchmal erforderlich, da einige Datenbanken die Anzahl der Elemente in einer IN-Klausel begrenzen.

4. Verknüpfen Sie nicht zugeordnete Entitäten in einer Abfrage

Sie können in JPQL-Abfragen mühelos zugeordneten Zuordnungen zwischen Entitäten beitreten. Die Zuordnung enthält bereits die erforderlichen Verknüpfungsbedingungen und muss in Ihrer Abfrage nicht angegeben werden.

Aber was ist mit Entitäten, die zugeordnete Datenbanktabellen zuordnen, aber keine zugeordnete Zuordnung haben?

Und das ist keine rhetorische Frage.

Die meisten Entitätsmodelle ordnen nicht alle möglichen Zuordnungen zu. Sie ordnen nur diejenigen zu, die im Domänenmodell einen Wert zu liefern scheinen, und nicht diejenigen, in denen in zwei Datenbanktabellen (scheinbar aus Versehen) derselbe Fremdschlüssel gespeichert ist. Es kommt auch häufig vor, dass eine Zu-Viele-Zuordnung mit vielen Datensätzen auf der anderen Seite nicht mit Hibernate verknüpft wird. Das Risiko, dass jemand den Getter des Vereins anruft und mehrere hundert oder tausend Entitäten abruft, ist einfach zu hoch.

Das ist völlig in Ordnung, solange Sie sich nur das Domain-Modell ansehen. Sie benötigen diese Assoziationen wahrscheinlich nicht im Modell. Dies bedeutet jedoch nicht, dass Sie sie in einer Ihrer JPQL-Abfragen nicht benötigen.

In diesem Fall haben Sie drei Möglichkeiten:

1 Modellieren Sie die Zuordnung zwischen den Entitäten oder
2 Verwenden Sie in Ihrer JPQL-Abfrage einen Cross-Join, der zu Leistungsproblemen führen kann, oder
3 Verwenden Sie die firmeneigene JOIN-Klausel von Hibernate. Ich bevorzuge Option 3. Es ist die einfachste und natürlichste.

Seit Hibernate 5.1 können Sie Entitäten ohne modellierte Zuordnung mithilfe einer SQL-ähnlichen Syntax verbinden.

5. @Wiederholbare Anmerkungen

Wiederholbare Annotationen sind eine der kleineren Änderungen in Java 8. Sie können eine Klasse, ein Attribut oder eine Schnittstelle mit derselben Annotation mehrmals annotieren. Ein typisches JPA-Beispiel, in dem Sie dies tun möchten definiert mehrere benannte Abfragen für eine Entität.

Bisher mussten Sie Ihre Entität mit einer @NamedQueries-Annotation versehen, die ein Array von @NamedQuery-Annotationen enthielt. Das nervige daran ist, dass die Annotation @NamedQueries nur ein Container ist. Es liefert keinen Wert für sich. Seit Hibernate 5.2 müssen Sie das nicht mehr tun. Zumindest nicht, solange Sie die Hibernate-Version der Annotation org.hibernate.annotations.NamedQuery verwenden. @NamedQuery und viele andere Hibernate-Anmerkungen können jetzt wiederholt und mehrmals zugewiesen werden. Wie Sie im folgenden Codeausschnitt sehen können, ist der Code dadurch einfacher zu lesen und viel komfortabler zu verwenden.

Creadit/Source : https://www.thoughts-on-Java.org/5-new-features-hibernate-5- Jeder-Entwickler-weiß /

2
Vijay Barot