Java Academy · Lektion

Entitetsmapping med JPA-annoteringer

Definér @Entity, @Table, @Id, @GeneratedValue, @Column og @Embedded for et rent entitetsdesign.

Lektion 1 af 413 trin

Entitetsmapping med JPA-annoteringer er en gratis Java Academy-lektion på CoddyKit. Dette er lektion 1 af 4. Du kan læse hele lektionen gratis nedenfor — og derefter øve dig praktisk i browseren med en indbygget kodeeditor og en AI-vejleder, der er tilgængelig døgnet rundt. Den er en del af læringsforløbet i Java Academy, og dine fremskridt synkroniseres på tværs af nettet og CoddyKit-appen. Java Academy-kurset indeholder 4 lektioner i alt.

Hvad er tilknytning af JPA-entiteter

JPA (Jakarta Persistence API) tilknytter Java-klasser til databasetabeller ved hjælp af annoteringer. Hibernate er den mest almindelige JPA-udbyder. Der kræves ingen SQL-DDL – JPA genererer skemaer ud fra annoteringerne.

@Entity og @Table

@Entity markerer en klasse som en JPA-entitet. @Table tilpasser tabelnavn, skema og entydighedsbegrænsninger. Alle entiteter skal have en konstruktør uden argumenter (den kan være protected).

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

@Id og @GeneratedValue

@Id markerer feltet med primærnøglen. @GeneratedValue konfigurerer strategien for automatisk generering: IDENTITY (automatisk inkrementering i databasen), SEQUENCE (databasesekvens, bedre til masseindsættelse) eller AUTO.

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

@Column: Tilpasning af kolonner

@Column angiver kolonnenavn, længde, om værdien må være null og entydighed. Uden den bliver feltnavnet til kolonnenavnet.

@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 og @Embeddable

Udtræk en gruppe kolonner til et genbrugeligt værdiobjekt, der er annoteret med @Embeddable. Brug @Embedded i entiteten for at medtage dets felter.

@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: Lagring af enum-værdier

Gem enum-værdier som deres navnestreng (STRING) eller som et heltal i ordinalform (ORDINAL). Brug altid STRING – ordinalværdier går i stykker, når enum-værdier omarrangeres.

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

@CreationTimestamp og @UpdateTimestamp

Hibernate-specifikke annoteringer, der automatisk angiver tidsstemplet ved henholdsvis indsættelse og opdatering – du behøver ikke længere manuel @PrePersist.

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

@Transient: Udelukkelse af felter

Felter, der er annoteret med @Transient, gemmes ikke. Brug det til afledte eller beregnede felter, som ikke skal gemmes i databasen.

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

@Lob: Store objekter

Brug @Lob til at knytte store tekstkolonner (TEXT/CLOB) eller binære kolonner (BLOB) til entiteten. PostgreSQL tilknytter @Lob String til TEXT.

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

Kontrakten for equals og hashCode

JPA-entiteter i samlinger skal implementere equals / hashCode baseret på forretningsnøglen, ikke det genererede ID, som er null før lagring. Brug @NaturalId eller en surrogatnøgle med UUID.

@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 til optimistisk låsning

Tilføj et felt med @Version. Hibernate øger det ved hver opdatering. Hvis to transaktioner opdaterer den samme række samtidig, kaster den anden OptimisticLockException.

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

Hurtigt tjek

Hvorfor bør @Enumerated bruge STRING i stedet for ORDINAL?

Opsummering

Brug @Entity/@Table til tilknytning mellem klasser og tabeller. @Id+@GeneratedValue til primærnøgler. @Column til begrænsninger. @Embedded til værdiobjekter. Brug altid @Enumerated(STRING). Tilføj @Version til optimistisk låsning.

Gratis at komme i gang

Lær Java med en AI-underviser — gratis

Skriv og kør rigtig kode i din browser, få øjeblikkelig hjælp fra en AI-underviser døgnet rundt, og fortsæt, hvor du slap, på web eller i appen.

Kurser
104
Lektioner
374

Ofte stillede spørgsmål

Er lektionen “Entitetsmapping med JPA-annoteringer” gratis?

Ja — hele teksten til “Entitetsmapping med JPA-annoteringer” kan læses gratis her på nettet. Hvis du vil øve dig interaktivt med en indbygget kodeeditor og en AI-vejleder døgnet rundt og få adgang til resten af Java Academy-kurset, skal du opgradere til CoddyKit PRO. Java Academy-kurset indeholder 4 lektioner i alt.

Hvad lærer jeg i “Entitetsmapping med JPA-annoteringer”?

Definér @Entity, @Table, @Id, @GeneratedValue, @Column og @Embedded for et rent entitetsdesign. Du øver dig i Java Academy med praktisk kode, som du kører direkte i browseren, og en AI-vejleder døgnet rundt besvarer dine spørgsmål, mens du arbejder dig gennem lektionen.

Skal jeg have erfaring for at begynde på Java Academy?

Der kræves ingen tidligere erfaring. Java Academy på CoddyKit er tilrettelagt for både begyndere og øvede, så du kan starte her eller fra begyndelsen og lære i dit eget tempo. Dette er lektion 1 af 4.

Hvor lang tid tager lektionen “Entitetsmapping med JPA-annoteringer”?

De fleste CoddyKit-lektioner tager cirka 5–10 minutter. Hver lektion er kort og interaktiv, så du gør løbende fremskridt og kan fortsætte, hvor du slap – på både web og app.

Kan jeg skrive og køre kode i denne Java Academy-lektion?

Ja. Alle Java Academy-lektioner har en indbygget kodeeditor, så du kan skrive og køre rigtig kode direkte i din browser og få øjeblikkelig feedback fra AI – uden lokal opsætning.

Alle lektioner i dette kursus

  1. Entitetsmapping med JPA-annoteringer
  2. Spring Data-repositorier og query-metoder
  3. One-to-many- og many-to-many-relationer
  4. Sideinddeling, sortering og projektioner
← Tilbage til Java Academy