0Pricing
Java Academy · Lektion

Entity-Mapping mit JPA-Annotationen

Definieren Sie @Entity, @Table, @Id, @GeneratedValue, @Column und @Embedded für ein sauberes Entity-Design.

Entity-Mapping mit JPA-Annotationen ist eine kostenlose Java Academy-Lektion auf CoddyKit. Dies ist Lektion 1 von 4. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des Java Academy-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der Java Academy-Kurs umfasst insgesamt 4 Lektionen.

Was ist JPA-Entity-Mapping?

JPA (Jakarta Persistence API) bildet Java-Klassen mithilfe von Annotationen auf Datenbanktabellen ab. Hibernate ist der am häufigsten verwendete JPA-Provider. Es ist kein SQL-DDL erforderlich – JPA generiert die Schemata aus den Annotationen.

@Entity und @Table

@Entity kennzeichnet eine Klasse als JPA-Entity. @Table passt Tabellenname, Schema und Eindeutigkeitsbedingungen an. Jede Entity benötigt einen parameterlosen Konstruktor (der geschützt sein kann).

@Entity
@Table(name = "users", uniqueConstraints = @UniqueConstraint(columnNames = "email"))
public class User {
    // ...
    protected User() {} // required by JPA
}

@Id und @GeneratedValue

@Id kennzeichnet das Primärschlüsselfeld. @GeneratedValue konfiguriert die Strategie zur automatischen Generierung: IDENTITY (Auto-Increment der Datenbank), SEQUENCE (Datenbanksequenz, besser für Bulk-Insert) oder AUTO.

@Entity
public class User {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
}

@Column: Spalten anpassen

@Column legt Spaltenname, Länge, Nullbarkeit und Eindeutigkeit fest. Ohne diese Annotation wird der Feldname zum Spaltennamen.

@Column(name = "full_name", nullable = false, length = 100)
private String name;
@Column(name = "email", unique = true, nullable = false)
private String email;
@Column(name = "created_at", updatable = false)
private LocalDateTime createdAt;

@Embedded und @Embeddable

Lagern Sie eine Gruppe von Spalten in ein wiederverwendbares Value Object aus, das mit @Embeddable annotiert wird. Verwenden Sie @Embedded in der Entity, um dessen Felder einzubinden.

@Embeddable
public class Address {
    private String street, city, country;
    @Column(name = "zip_code") private String zipCode;
}
@Entity
public class User {
    @Embedded private Address address;
}

@Enumerated: Enums persistieren

Persistieren Sie Enums entweder als Namensstring (STRING) oder als Ordinalzahl (ORDINAL). Verwenden Sie immer STRING – Ordinalzahlen werden ungültig, wenn Enum-Werte neu angeordnet werden.

@Enumerated(EnumType.STRING)
@Column(nullable = false)
private UserStatus status; // stored as "ACTIVE", "INACTIVE", etc.

@CreationTimestamp und @UpdateTimestamp

Hibernate-spezifische Annotationen, die den Zeitstempel bei Insert beziehungsweise Update automatisch setzen – ein manuelles @PrePersist ist nicht erforderlich.

@CreationTimestamp
@Column(updatable = false)
private LocalDateTime createdAt;
@UpdateTimestamp
private LocalDateTime updatedAt;

@Transient: Felder ausschließen

Mit @Transient annotierte Felder werden nicht persistiert. Verwenden Sie dies für abgeleitete oder berechnete Felder, die nicht in der Datenbank gespeichert werden sollen.

@Transient
public String getFullName() { return firstName + " " + lastName; }

@Lob: Große Objekte

Verwenden Sie @Lob, um große Textspalten (TEXT/CLOB) oder Binärspalten (BLOB) abzubilden. PostgreSQL bildet @Lob String auf TEXT ab.

@Lob
@Column(name = "content")
private String content; // maps to TEXT in PostgreSQL

Vertrag für equals und hashCode

JPA-Entities in Collections müssen equals / hashCode auf Grundlage des fachlichen Schlüssels implementieren, nicht anhand der generierten ID, die vor der Persistierung null ist. Verwenden Sie @NaturalId oder einen ersatzweisen UUID-Schlüssel.

@Override public boolean equals(Object o) {
    if (this == o) return true;
    if (!(o instanceof User u)) return false;
    return email != null && email.equals(u.email);
}
@Override public int hashCode() { return getClass().hashCode(); }

@Version für optimistisches Sperren

Fügen Sie ein @Version-Feld hinzu. Hibernate erhöht dessen Wert bei jedem Update. Wenn zwei Transaktionen dieselbe Zeile gleichzeitig aktualisieren, wirft die zweite eine OptimisticLockException.

@Version
private Long version; // auto-managed by Hibernate

Schnelltest

Warum sollte @Enumerated STRING statt ORDINAL verwenden?

Zusammenfassung

Verwenden Sie @Entity/@Table für die Abbildung von Klassen auf Tabellen. @Id+@GeneratedValue für Primärschlüssel. @Column für Einschränkungen. @Embedded für Value Objects. Verwenden Sie immer @Enumerated(STRING). Fügen Sie @Version für optimistisches Sperren hinzu.

Häufig gestellte Fragen

Ist die Lektion „Entity-Mapping mit JPA-Annotationen“ kostenlos?

Ja — der vollständige Text von „Entity-Mapping mit JPA-Annotationen“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des Java Academy-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der Java Academy-Kurs umfasst insgesamt 4 Lektionen.

Was lerne ich in „Entity-Mapping mit JPA-Annotationen“?

Definieren Sie @Entity, @Table, @Id, @GeneratedValue, @Column und @Embedded für ein sauberes Entity-Design. Du übst Java Academy mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.

Brauche ich Erfahrung, um Java Academy zu starten?

Keine Vorkenntnisse erforderlich. Java Academy auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 1 von 4.

Wie lange dauert die Lektion „Entity-Mapping mit JPA-Annotationen“?

Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.

Kann ich in dieser Java Academy-Lektion Code schreiben und ausführen?

Ja. Jede Java Academy-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.

Alle Lektionen in diesem Kurs

  1. Entity-Mapping mit JPA-Annotationen
  2. Spring-Data-Repositories und Abfragemethoden
  3. One-to-Many- und Many-to-Many-Beziehungen
  4. Seitennummerierung, Sortierung und Projektionen
← Zurück zu Java Academy