Ogni entity bean deve essere identificato univicamente.
Sono possibili 3 strategie:
Questa annotation è applicata al campo che mappa la primary key nel database, quando nel database la chiave primaria è composta da un singolo campo.
I campi supportati sono campi primitivi, e oggetti che implementano Serializable come java.lang.String java.util.Date e java.sql.Date.
Non è raccomandato utilizzare campi di tipo float o double, per via di possibili arrotondamenti e imprecisioni
@IdClass
Nel caso di composite key sul db si crea una classe con le chiavi e in questa classe si effettua l'override dei due metodi di object equals e hashCode.
Quindi nell'entity bean si utilizza a livello di classe l'annotation @IdClass facendo riferimento alla classe appena creata e quindi sui singoli campi che fanno parte dell'id si utilizza l'annotation @Id.
Esempio:
Supponiamo di avere una classe Persona con chiave composta formata dall'accoppiata cognome e nome + altri campi.
Definiamo quindi l'IdClass
}
L' entity è definita così:
@EmbeddedId
In questo caso si crea come nel caso precedente la classe con la primary key ma annotandola con @Embeddable e quindi referenziando poi la classe stessa con l'annotation @EmbeddedId
Nell'Entity quindi
}
Sono possibili 3 strategie:
- Usando l'annotation @Id;
- Usando l'annotation @IdClass;
- Usando l'annotation @EmbeddedId.
Questa annotation è applicata al campo che mappa la primary key nel database, quando nel database la chiave primaria è composta da un singolo campo.
I campi supportati sono campi primitivi, e oggetti che implementano Serializable come java.lang.String java.util.Date e java.sql.Date.
Non è raccomandato utilizzare campi di tipo float o double, per via di possibili arrotondamenti e imprecisioni
@IdClass
Nel caso di composite key sul db si crea una classe con le chiavi e in questa classe si effettua l'override dei due metodi di object equals e hashCode.
Quindi nell'entity bean si utilizza a livello di classe l'annotation @IdClass facendo riferimento alla classe appena creata e quindi sui singoli campi che fanno parte dell'id si utilizza l'annotation @Id.
Esempio:
Supponiamo di avere una classe Persona con chiave composta formata dall'accoppiata cognome e nome + altri campi.
Definiamo quindi l'IdClass
public class ChiavePersona implements Serializable
{
String nome;
String cognome;
public ChiavePersona(){}
public boolean equals(Object other) {
if(other instanceof ChiavePersona){
final ChiavePersona otherPK=(ChiavePersona)other;
return (other.name.equals(this.nome) && other.cognome.equals(this.cognome));
}
}
public int hashCode(){
return super.hashCode();
}
L' entity è definita così:
@Entity
@IdClass(ChiavePersona.class)
public class Persona{
@Id
protected String nome;
@Id
protected String cognome;
......
}@EmbeddedId
In questo caso si crea come nel caso precedente la classe con la primary key ma annotandola con @Embeddable e quindi referenziando poi la classe stessa con l'annotation @EmbeddedId
Nell'Entity quindi
@Entity
public class Persona{
public Persona(){}
@EmbeddedId
protected ChiavePersona personaId;
}
.....
Nessun commento:
Posta un commento