web-dev-qa-db-fra.com

Différence entre @Size, @Length et @Column (longueur = valeur) lors de l'utilisation de JPA et Hibernate

Quelle est la différence entre le contrôle de validation des trois champs suivants?

@Entity
public class MyEntity {

    @Column(name = "MY_FIELD_1", length=13)
    private String myField1;
    @Column(name = "MY_FIELD_2")
    @Size(min = 13, max = 13)
    private String myField2;
    @Column(name = "MY_FIELD_3")
    @Length(min = 13, max = 13)
    private String myField3;

    // getter & setter

}

J'ai lu que le premier concerne les fichiers DDL. La seconde est pour la validation des haricots. Le troisième est pour la validation en veille prolongée.

Est-ce exact? Ce que je ne comprends toujours pas, c'est: quand dois-je utiliser lequel? Quand l'une de ces annotations se déclenche-t-elle?

Edit: Pensez à la situation suivante: Étant donné la nécessité de développer une entité avec un champ de type chaîne de longueur 13. Laquelle des méthodes susmentionnées choisiriez-vous? Ou mieux encore: quelles questions devez-vous vous poser pour savoir laquelle convient à vos objectifs?

47
Chris311
  1. @Column est une annotation JPA et l'attribut length est utilisé par l'outil de génération de schéma pour définir la longueur de colonne SQL associée.
  2. @Size est une annotation de validation de bean qui valide que la chaîne associée a une valeur dont la longueur est limitée par les valeurs minimale et maximale.
  3. @Length est une annotation spécifique à Hibernate et a la même signification que @Size

Donc les deux 2. et 3. devrait valider la longueur de String à l'aide de la validation de bean. Je choisirais 2. parce que c'est générique.

91
Vlad Mihalcea