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;
}
Était-ce utile?

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;
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top