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 @Table
può 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 @Column
ha 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 @Column
per 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.