web-dev-qa-db-fra.com

JPA - @Column (unique = true) - Quel est vraiment l'intérêt d'avoir un attribut 'unique'?

Supposons que j'aie un tableau "sujet"

CREATE TABLE subject (id int PRIMARY KEY, name VARCHAR(255) **UNIQUE**)

et objet mappé associé,

@Entity
@Table(name="subject")
public class SubjectDO {
    @Id
    @Column(name="id")
    int id;

    @Column(name="name", unique=true)
    String name;
    ...
    // Getter-Setter methods
}

Lorsque j'essaie d'enregistrer un objet ayant un 'nom' en double avec et sans 'unique = true' défini, j'obtiens un comportement similaire (même exception.) Et il est évident que l'implémentation JPA ne peut vraiment rien faire à moins de contacter DB pour vérification.

Quel est le vrai cas d'utilisation pour cela?

(Je suppose ici que la contrainte unique est également définie au niveau de la base de données.)

26
Gaurang Patel

unique dans @Column n'est utilisé que si vous laissez votre fournisseur JPA créer la base de données pour vous - il créera la contrainte unique sur la colonne spécifiée. Mais si vous avez déjà la base de données, ou si vous la modifiez une fois créée, alors unique n'a aucun effet.

56
Predrag Maric

unique=true dans @Column l'annotation sera utilisée uniquement dans DDL generation, il n'a aucun impact pendant l'exécution. Les vérifications d'unicité réelles se produisent dans le database.

13
Sajan Chandran