CodeGym /Corsi /SQL & Hibernate /Mappatura delle classi in ibernazione

Mappatura delle classi in ibernazione

SQL & Hibernate
Livello 9 , Lezione 1
Disponibile

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.

Commenti
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION