La primary key è l'identità di un entity bean.
L'annotazione @javax.persistence.Id identifica la proprietà che funge da primarìy key.
La chiave primaria può essere autogenerata dal provider, in questo caso si utilizza l'annotazione
@javax.persistence.GeneratedValue con le seguenti strategie (attributo strategy):
E' la strategia di default che utilizza le colonne autoincrementali presenti in molti database come MySql o Sql Server.
IDENTITY
Con questa strategia si obbliga il provider ad utilizzare i campi autoincrementali del db (esempio in mysql AUTO_INCREMENT e in Sql Server IDENTITY ) Per adottare questa strategia basta fare così:
....
TABLE
Con questa strategia si definisce una tabella utilizzata come "serbatoio" per fornire le chiavi primarie.
La struttura di questa tabella è la seguente:
Bisogna utilizzare una altra annotazione @TableGenerator dove si specifica il generatore con il nome della tabella creata etc etc.
Esempio
SEQUENCE
Alcuni RDBMS come Oracle hanno un meccanismo built in per la generazione delle primary key, definito appunto SEQUENCE.
In questi casi a livello di classe va definito il sequence generator utilizzato e referenziato dall'attributo generator dell'annotazione @GeneratedValue.
Esempio:
L'annotazione @javax.persistence.Id identifica la proprietà che funge da primarìy key.
La chiave primaria può essere autogenerata dal provider, in questo caso si utilizza l'annotazione
@javax.persistence.GeneratedValue con le seguenti strategie (attributo strategy):
- TABLE;
- SEQUENCE;
- IDENTITY;
- AUTO.
E' la strategia di default che utilizza le colonne autoincrementali presenti in molti database come MySql o Sql Server.
IDENTITY
Con questa strategia si obbliga il provider ad utilizzare i campi autoincrementali del db (esempio in mysql AUTO_INCREMENT e in Sql Server IDENTITY ) Per adottare questa strategia basta fare così:
....
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
public long getId(){
.....
}TABLE
Con questa strategia si definisce una tabella utilizzata come "serbatoio" per fornire le chiavi primarie.
La struttura di questa tabella è la seguente:
create table GENERATOR_TABLE
{
PRIMARY_KEY_COLUMN VARCHAR not null,
VALUE_COLUMN long not null
}Bisogna utilizzare una altra annotazione @TableGenerator dove si specifica il generatore con il nome della tabella creata etc etc.
Esempio
@TableGenerator(name="myGenerator",table="GENERATOR_TABLE",pkColumnName="PRIMARY_KEY_COLUMN",
valueColumnName="VALUE_COLUMN",pkColumnValue="CUST_ID",allocationsize=10)
@Id
@GeneratedValue(strategy=GenerationType.TABLE,generator="myGenerator")
public long getId(){...}SEQUENCE
Alcuni RDBMS come Oracle hanno un meccanismo built in per la generazione delle primary key, definito appunto SEQUENCE.
In questi casi a livello di classe va definito il sequence generator utilizzato e referenziato dall'attributo generator dell'annotazione @GeneratedValue.
Esempio:
@Entity
@Table(name="CUSTOMER_TABLE")
@SequenceGenerator(name="CUSTOMER_SEQUENCE",sequenceName="CUST_SEQ")
public class Customer implements Serializable{
.....
@Id
@GeneratedValue(strategy=GenerationType.SEQUENCE,generator="CUSTOMER_SEQUENCE")
public long getId(){...}
....
}
Nessun commento:
Posta un commento