GEDOPLAN
JavaJakarta EE (Java EE)Java SEModellierung

Java Records in Jakarta Persistence 3.2: Moderne Datenmodelle ohne Ballast

JavaJakarta EE (Java EE)Java SEModellierung
flea market 1262036 1280 e1752579980333

Mit Jakarta Persistence 3.2 (Teil von Jakarta EE 11) halten Java Records endgültig Einzug in die Welt der objekt-relationalen Abbildung. Java Records lassen sich nun nicht nur als kompakte Datencontainer nutzen, sondern auch als eingebettete Value Objects, Listen von Embeddables und sogar für zusammengesetzte Primärschlüssel. Das macht den Code kompakter, übersichtlicher und besser wartbar.

@Embeddable Records

Auch für einfache Wertobjekte mussten bisher Klassen mit Gettern, Settern, Konstruktoren und equals/hashCode-Methoden geschrieben werden. Mit Jakarta Persistence 3.2 genügt jetzt ein einfaches Record:

@Embeddable
public record Address(String street, String city, String postalCode) {}

In einem Entity kann dieses Address-Objekt direkt eingebettet werden:

@Entity
public class Customer {
    @Id
    @GeneratedValue(strategy = IDENTITY)
    private Long id;

    @Embedded
    private Address address;
}

Vorteile:

  • Weniger Boilerplate: Records eliminieren viel Standard-Code, der bei klassischen POJOs nötig wäre
  • Unveränderlichkeit: Felder sind final und können nach der Initialisierung nicht mehr geändert werden
  • Wertbasierte Gleichheit: equals() und hashCode() werden automatisch auf Basis aller Komponenten generiert

Listen von Records mit @ElementCollection

Auch die Speicherung mehrerer Adressen pro Kunde ist unkompliziert möglich. Mit @ElementCollection wird eine Liste von Embeddable-Records elegant und sauber verwaltet:

@Entity
public class Customer {
    @Id
    @GeneratedValue(strategy = IDENTITY)
    private Long id;

    @ElementCollection
    private List<Address> addresses;
}

Die Zuordnung übernimmt Jakarta Persistence automatisch, inklusive separater Tabelle und Fremdschlüssel-Beziehung.

Vorteile:

  • Address bleibt ein @Embeddable Record.
  • Mit @ElementCollection erzeugt JPA automatisch eine separate Tabelle für die Adressen, die über einen Fremdschlüssel mit Customer verknüpft ist.
  • Die Werte der Collection-Elemente werden in eigenen Zeilen gespeichert, die Zuordnung erfolgt über den Primärschlüssel des Entity.

Hinweis:

Ohne @ElementCollection funktioniert eine Liste von Embeddables nicht korrekt. Mit der Annotation ist die Speicherung von Listen und Sets von Value Objects jedoch problemlos möglich.

Zusammengesetzte Primärschlüssel mit @EmbeddedId

Für zusammengesetzte Schlüssel können Records als eingebettete Schlüsselobjekte genutzt werden:

@Embeddable
public record OrderItemId(Long orderId, Long productId) {}

@Entity
public class OrderItem {

    @EmbeddedId
    private OrderItemId id;

    private int quantity;
}

Vorteile:

  • Alle Schlüssel-Felder sind gebündelt in einem Objekt.
  • equals() und hashCode() werden automatisch korrekt generiert.

Records als Schlüsselklasse mit @IdClass

Alternativ kann ein Record auch als Schlüsselklasse für mehrere @Id-Felder verwendet werden. Das ist besonders nützlich, wenn das Entity selbst die Schlüssel-Felder enthält:

public record OrderItemId(Long orderId, Long productId) {}

@IdClass(OrderItemId.class)
@Entity
public class OrderItem {

    @Id
    private Long orderId;

    @Id
    private Long productId;

    private int quantity;
}

Fazit: Weniger Ballast, mehr Klarheit


Mit Jakarta Persistence 3.2 und Java Records wird der Einsatz von unveränderlichen Wertobjekten und zusammengesetzten Schlüsseln deutlich eleganter und sicherer. Egal ob als eingebettetes Attribut, als Liste von Value Objects, als zusammengesetzter Primärschlüssel oder als Schlüsselklasse für mehrere IDs: Records sorgen für kompakteren, besser wartbaren Code und bringen moderne Java-Sprachelemente in die Persistenzschicht.


Quellen und weiterführende Links:

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Bitte füllen Sie dieses Feld aus.
Bitte füllen Sie dieses Feld aus.
Bitte gib eine gültige E-Mail-Adresse ein.
Sie müssen den Bedingungen zustimmen, um fortzufahren.

Autor

Diesen Artikel teilen

LinkedIn
Xing

Gibt es noch Fragen?

Fragen beantworten wir sehr gerne! Schreibe uns einfach per Kontaktformular.

Kurse

weitere Blogbeiträge

Work Life Balance. Jobs bei Gedoplan

We are looking for you!

Lust bei GEDOPLAN mitzuarbeiten? Wir suchen immer Verstärkung – egal ob Entwickler, Dozent, Trainerberater oder für unser IT-Marketing! Schau doch einfach mal auf unsere Jobseiten! Wir freuen uns auf Dich!

Work Life Balance. Jobs bei Gedoplan

We are looking for you!

Lust bei GEDOPLAN mitzuarbeiten? Wir suchen immer Verstärkung – egal ob Entwickler, Dozent, Trainerberater oder für unser IT-Marketing! Schau doch einfach mal auf unsere Jobseiten! Wir freuen uns auf Dich!