chiave primaria

Disponibile

@Id annotazione

Ogni entità Entity in Hibernate deve avere un campo che sarà la chiave primaria: contiene un valore univoco per tutti gli oggetti di questa classe. In genere, questo campo è annotato con l' annotazione @Id .

Forma generale:

@Id
Class Name;

Esempio:

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

   @Embedded
   public UserAddress address;

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

Posizionamento delle annotazioni

A proposito, puoi scrivere annotazioni @Column non solo per i campi, ma anche per i metodi: per getter o setter. Esempio:

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

   @Id
   @Column(name="id")
   public Integer getId() {
   	return this.id;
   }
   public void setId(Integer id)    {
  	this.id = id;
   }

   @Column(name="created_date")
   public Date getDate() {
  	return this.createdDate;
   }
   public void setCreatedDate(Date date) {
      this. createdDate = date;
   }
}

Questo approccio è apparso quando le annotazioni hanno iniziato ad essere aggiunte non solo alle classi, ma anche alle interfacce. L'interfaccia non ha campi di classe, ma ci sono metodi: getter e setter. Hibernate supporta entrambi questi standard.

Importante! Se una classe ha l' annotazione @Entity , tutti i suoi campi vengono trattati da Hibernate come campi persistenti (a meno che non abbiano specificato l' annotazione @Transient ). Anche se i campi non hanno alcuna annotazione: in questo caso, il nome della colonna è considerato uguale al nome del campo della classe.

È qui che l' annotazione @Id gioca un ruolo importante. Se l'annotazione viene inserita in un campo di classe, Hibernate esaminerà i nomi e i tipi dei campi. Se l' annotazione @Id viene inserita in un metodo, Hibernate esaminerà i nomi e i tipi dei metodi.

Esempio 1:

@Entity
@Table(name="user")
class User
{
   @Id
    public Integer id;
    public Date createdDate;  //this field will be treated as if it had @Column(name=" createdDate ")

}

Esempio 2:

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

   @Id
   public Integer getId() {
   	return this.id;
   }
   public void setId(Integer id)    {
  	this.id = id;
   }

   public Date getDate() { //this field will be treated as if it had @Column(name=”date ”)
  	return this.createdDate;
   }
   public void setCreatedDate(Date date) {
  	this. createdDate = date;
   }

}

Annotazione @GeneratedValue

Puoi assegnare tu stesso un ID ai tuoi nuovi oggetti o lasciarlo in balia di Hibernate. Affinché Hibernate possa capire meglio come assegnare gli ID ai tuoi oggetti, ha un'annotazione speciale:

@GeneratedValue

Questa annotazione di solito contrassegna lo stesso campo dell'annotazione @Id . Ha 4 possibili strategie di assegnazione dell'ID:

  • AUTO
  • IDENTITÀ
  • SEQUENZA
  • TAVOLO

Un esempio di annotazione con la strategia specificata:

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

    public Date createdDate;
}

Se non viene specificato alcun valore di policy, verrà selezionata la strategia AUTO. La strategia AUTO significa che Hibernate assegnerà l'ID stesso, in base principalmente al tipo di dati del campo ID.

Perché sul tipo? Sì, perché i tipi di ID possono essere molto diversi, ad esempio String o GUID. Esempio:

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

    public Date createdDate;
}

Nota: un GUID in Java è chiamato UUID, storicamente parlando. E Hibernate può generare UUID univoci per i tuoi oggetti se lo chiedi.

Varie strategie @GeneratedValue

Se specifichi il tipo GeneratedValue(strategy = GenerationType.IDENTITY) , Hibernate delega l'impostazione dell'ID al livello del database. In genere, utilizza una colonna denominata PRIMARY KEY, AUTOINCREMENT.

Ma se desideri che i tuoi ID siano univoci e generati secondo un algoritmo appositamente specificato, puoi utilizzare l' annotazione GeneratedValue(strategy = GenerationType.SEQUENCE) , ad esempio:

@Entity
@Table(name="user")
public class User {
	@Id
	@GeneratedValue(generator = "sequence-generator")
	@GenericGenerator(
  	name = "sequence-generator",
  	strategy = "org.hibernate.id.enhanced.SequenceStyleGenerator",
  	parameters = {
    	@Parameter(name = "sequence_name", value = "user_sequence"),
    	@Parameter(name = "initial_value", value = "4"),
    	@Parameter(name = "increment_size", value = "1")
    	}
	)
	private long userId;

	// ...
}

Esistono molti altri modi per generare un ID. Ad esempio, potresti avere una chiave univoca composita composta da più colonne. E quando scrivi un oggetto nel database, devi compilare tutte queste colonne.

Non li darò in dettaglio. Tuttavia, lo scopo delle nostre lezioni è conoscere Hibernate e non raccontare nuovamente la documentazione ufficiale.

Commenti
  • Popolari
  • Nuovi
  • Vecchi
Devi avere effettuato l'accesso per lasciare un commento
Questa pagina non ha ancora commenti