Si je veux que plusieurs colonnes constituent un identifiant.
Exemple SQL:
CONSTRAINT [PK_NAME] PRIMARY KEY ([Column1],[Column2],[Column3])
Comment puis-je faire cela avec une classe d'entité Jpa? par la définition de la colonne?
il suffit de définir le champ id comme:
value = Column1 + Column2 + Column3 // aint working.
Vous devez avoir une classe pour votre clé composite:
public class CompositeKey implements Serializable {
private int column1;
private int column2;
private int column3;
}
dans votre classe d'entité, utilisez l'annotation @IdClass
:
@Entity
@IdClass(CompositeKey.class)
public class EntityExample {
@Id
private int column1;
@Id
private int column2;
@Id
private int column3;
...
...
}
Je pense que cela devrait fonctionner. J'espère que ça aide, à la vôtre!
Oui, et il y a l'autre solution, celle mentionnée par @jklee, les deux fonctionnent, c'est une question de préférence.
Utilisez @Embeddable
et @EmbeddedId
.
Exemple:
@Entity
public class Project {
@EmbeddedId ProjectId id;
:
}
@Embeddable
Class ProjectId {
int departmentId;
long projectId;
}
Plus d'informations ici http://www.objectdb.com/Java/jpa/entity/id#Embedded_Primary_Key_
Si tous les champs de la classe font partie de la clé primaire, la solution serait assez simple (solution d'extension fournie par @ raul-cuth):
@Entity
@IdClass(EntityExample.class)
public class EntityExample implements Serializable {
@Id
private int column1;
@Id
private int column2;
@Id
private int column3;
}
@IdClass
sur la classe @Entity
suivie de l'annotation @Id
sur des champs individuels faisant partie de la clé primaire composite.@Embeddable
qui peut être composée de champs individuels de la clé primaire composite, puis une référence de cette classe peut être utilisée comme attribut avec l'annotation @Embedded
dans la classe @Entity
.