Mappatura delle entità con le annotazioni JPA
Definisca @Entity, @Table, @Id, @GeneratedValue, @Column e @Embedded per progettare entità ordinate.
Mappatura delle entità con le annotazioni JPA è una lezione Java Academy gratuita su CoddyKit. Questa è la lezione 1 di 4. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento Java Academy, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso Java Academy include 4 lezioni in totale.
Che cos'è il mapping delle entità JPA?
JPA (Jakarta Persistence API) associa le classi Java alle tabelle del database tramite annotazioni. Hibernate è il provider JPA più comune. Non è necessario scrivere DDL SQL: JPA genera gli schemi a partire dalle annotazioni.
@Entity e @Table
@Entity contrassegna una classe come entità JPA. @Table personalizza il nome della tabella, lo schema e i vincoli di unicità. Ogni entità deve avere un costruttore senza argomenti, che può essere protected.
@Entity
@Table(name = "users", uniqueConstraints = @UniqueConstraint(columnNames = "email"))
public class User {
// ...
protected User() {} // required by JPA
}@Id e @GeneratedValue
@Id contrassegna il campo della chiave primaria. @GeneratedValue configura la strategia di generazione automatica: IDENTITY (auto-incremento del database), SEQUENCE (sequenza del database, migliore per gli inserimenti massivi) oppure AUTO.
@Entity
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
}@Column: personalizzare le colonne
@Column imposta il nome della colonna, la lunghezza, la possibilità di contenere valori null e l'unicità. In sua assenza, il nome del campo diventa il nome della colonna.
@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 e @Embeddable
Estragga un gruppo di colonne in un value object riutilizzabile annotato con @Embeddable. Utilizzi @Embedded nell'entità per includerne i campi.
@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: persistenza degli enum
Salvi gli enum come stringa corrispondente al loro nome (STRING) oppure come intero ordinale (ORDINAL). Utilizzi sempre STRING: gli ordinali si rompono quando i valori dell'enum vengono riordinati.
@Enumerated(EnumType.STRING)
@Column(nullable = false)
private UserStatus status; // stored as "ACTIVE", "INACTIVE", etc.@CreationTimestamp e @UpdateTimestamp
Annotazioni specifiche di Hibernate che impostano automaticamente il timestamp rispettivamente durante l'inserimento e l'aggiornamento; non è necessario usare manualmente @PrePersist.
@CreationTimestamp
@Column(updatable = false)
private LocalDateTime createdAt;
@UpdateTimestamp
private LocalDateTime updatedAt;@Transient: escludere i campi
I campi annotati con @Transient non vengono persistiti. Li utilizzi per i campi derivati o calcolati che non devono essere memorizzati nel database.
@Transient
public String getFullName() { return firstName + " " + lastName; }@Lob: oggetti di grandi dimensioni
Utilizzi @Lob per associare colonne di testo di grandi dimensioni (TEXT/CLOB) o binarie (BLOB). PostgreSQL associa @Lob String a TEXT.
@Lob
@Column(name = "content")
private String content; // maps to TEXT in PostgreSQLContratto di equals e hashCode
Le entità JPA usate nelle collezioni devono implementare equals / hashCode basandosi sulla chiave di business, non sull'ID generato, che è null prima della persistenza. Utilizzi @NaturalId oppure una chiave surrogata 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 per il locking ottimistico
Aggiunga un campo @Version. Hibernate lo incrementa a ogni aggiornamento. Se due transazioni aggiornano contemporaneamente la stessa riga, la seconda genera OptimisticLockException.
@Version
private Long version; // auto-managed by HibernateVerifica rapida
Perché @Enumerated dovrebbe usare STRING invece di ORDINAL?
Riepilogo
Utilizzi @Entity/@Table per associare classi e tabelle. Utilizzi @Id+@GeneratedValue per le chiavi primarie, @Column per i vincoli e @Embedded per i value object. Utilizzi sempre @Enumerated(STRING). Aggiunga @Version per il locking ottimistico.
Domande Frequenti
La lezione «Mappatura delle entità con le annotazioni JPA» è gratuita?
Sì — il testo completo di «Mappatura delle entità con le annotazioni JPA» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso Java Academy, passa a CoddyKit PRO. Il corso Java Academy include 4 lezioni in totale.
Cosa imparerò in «Mappatura delle entità con le annotazioni JPA»?
Definisca @Entity, @Table, @Id, @GeneratedValue, @Column e @Embedded per progettare entità ordinate. Eserciti Java Academy con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.
Ho bisogno di esperienza per iniziare Java Academy?
Non è richiesta alcuna esperienza precedente. Java Academy su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 1 di 4.
Quanto tempo richiede la lezione «Mappatura delle entità con le annotazioni JPA»?
La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.
Posso scrivere ed eseguire codice in questa lezione Java Academy?
Sì. Ogni lezione Java Academy include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.
Tutte le lezioni di questo corso
- Mappatura delle entità con le annotazioni JPA
- Repository Spring Data e metodi di query
- Relazioni uno-a-molti e molti-a-molti
- Paginazione, ordinamento e proiezioni