Clés composées dans JPA
-
01-07-2019 - |
Question
Je souhaite créer une entité qui possède une clé primaire générée automatiquement, mais également une clé composée unique composée de deux autres champs. Comment puis-je faire cela dans JPA?
Je veux le faire parce que la clé primaire devrait être utilisée comme clé étrangère dans une autre table et qu'il ne serait pas bon de la composer.
Dans l'extrait suivant, j'ai besoin que la commande et le modèle soient uniques. pk est bien sûr la clé primaire.
@Entity
@Table(name = "dm_action_plan")
public class ActionPlan {
@Id
private int pk;
@Column(name = "command", nullable = false)
private String command;
@Column(name = "model", nullable = false)
String model;
}
La solution
Vous pouvez utiliser @UniqueConstraint
quelque chose comme ceci:
@Entity
@Table(name = "dm_action_plan",
uniqueConstraints={ @UniqueConstraint(columnNames= "command","model") } )
public class ActionPlan {
@Id
private int pk;
@Column(name = "command", nullable = false)
private String command;
@Column(name = "model", nullable = false)
String model;
}
Ceci permettra à votre implémentation JPA de générer le DDL pour la contrainte unique.
Autres conseils
Utilisez @GeneratedValue pour indiquer que la clé sera générée et @UniqueConstraint pour exprimer l'unicité
@Entity
@Table(name = "dm_action_plan"
uniqueConstraint = @UniqueConstraint({"command", "model"})
)
public class ActionPlan {
@Id
@GeneratedValue
private int pk;
@Column(name = "command", nullable = false)
private String command;
@Column(name = "model", nullable = false)
String model;
}