2.1 Annotazione @Entity, @Table

Se vuoi mappare la tua classe a una tabella nel database, per questo devi aggiungere fino a 3 annotazioni.

Innanzitutto, devi aggiungere un'annotazione alla classe @Entity. Questa annotazione davanti alla classe dirà a Hibernate che questa non è solo una classe, ma una classe speciale i cui oggetti devono essere memorizzati nel database.

Esempio:

@Entity
class User {
    public int id;
    public String name;
    public int level;
    public Date createdDate;
}

Questo è sufficiente a Hibernate per trattare gli oggetti di questa classe in modo speciale.

La seconda annotazione è @Table. Con il suo aiuto, puoi impostare il nome della tabella nel database a cui verrà associata questa classe. Esempio:

@Entity
@Table(name="user")
class User {
    public int id;
    public String name;
    public int level;
    public Date createdDate;
}

Se il nome della classe e il nome della tabella sono uguali, l'annotazione @Tablepuò essere omessa.

Inoltre, se la tua applicazione funziona con tabelle di diversi schemi contemporaneamente, devi specificare in quale particolare schema si trova la tabella:

@Entity
@Table(name="user", schema="test")
class User {
    public int id;
    public String name;
    public int level;
    public Date createdDate;
}

Sì, tutto è così semplice come sembra.

2.2 Annotazione @Column

La seconda cosa importante da sapere è la mappatura delle colonne della tabella ai campi della classe. Nella versione più semplice, Hibernate mapperà semplicemente i campi della tua classe di entità alle colonne della tabella desiderata.

Se vuoi controllare tutte le sfumature della mappatura, puoi utilizzare l'annotazione @Column. Esempio:

@Entity
@Table(name="user")
class User {
   @Column(name="id")
   public Integer id;

   @Column(name="name")
   public String name;

   @Column(name="level")
   public Integer level;

   @Column(name="created_date")
   public Date createdDate;
}

L'annotazione @Columnha vari parametri, di seguito considereremo i più popolari:

# Nome attributo Tipo di attributo Descrizione
1 nome Corda Imposta il nome della colonna della tabella per il campo della classe
2 unico booleano Tutti i valori dei campi devono essere univoci
3 annullabile booleano Il campo può essere nullo
4 lunghezza int Lunghezza massima (per stringhe)

Aggiungiamo alcuni vincoli ai campi della nostra classe User Entity:

  • il nome utente deve essere univoco e non più lungo di 100 caratteri
  • il livello può essere nullo
  • createdDate non può essere nullo

Quindi le nostre annotazioni diventano:

@Entity
@Table(name="user")
class User {
   @Column(name="id")
    public Integer id;

   @Column(name="name", unique=true, length=100)
   public String name;

   @Column(name="level", nullable=true)
   public Integer level;

   @Column(name="created_date", nullable=false)
   public Date createdDate;
}

Puoi creare un oggetto di tipo Utente e persino assegnargli tutti i campi nulli , tuttavia, quando provi a salvarlo nel database, Hibernate eseguirà un controllo e, se vengono violate delle restrizioni, verrà generata un'eccezione.

2.3 Annotazione @Id

E un'altra annotazione importante è @Id. Può essere utilizzato per impostare la chiave primaria per una tabella.

Devi solo specificare questa annotazione per il campo desiderato e Hibernate farà tutto da solo:

@Entity
@Table(name="user")
class User {
   @Id
   @Column(name="id")
   public Integer id;

   @Column(name="name")
   public String name;

   @Column(name="level")
   public Integer level;

   @Column(name="created_date")
   public Date createdDate;
}

Se vuoi che Hibernate generi in modo indipendente gli ID dei tuoi oggetti quando li aggiungi al database, allora devi aggiungere un'altra annotazione - @GeneratedValue. Quindi il nostro esempio sarebbe simile a questo:

@Entity
@Table(name="user")
class User {
   @Id
   @GeneratedValue
   public Integer id;

   @Column(name="name")
   public String name;

   @Column(name="level")
   public Integer level;

   @Column(name="created_date")
   public Date createdDate;
}

Abbiamo omesso l'annotazione @Columnper il campo id qui, poiché non contiene informazioni preziose: il nome del campo e il nome della colonna nella tabella sono gli stessi e, grazie al resto delle annotazioni, Hibernate capisce già che stiamo parlando di una tabella colonna.