Diferença entre @Size, @Length e @Column (length = value)

Diferença entre @Size, @Length e @Column (length = value)

1. Visão geral

Neste tutorial rápido, vamos dar uma olhada emJSR-330's@Size,Hibernate's@Length eJPA@Column's Atributolength.

À primeira vista,these may seem the same, but they perform different functions. Vamos ver como.

2. Origens

Simplificando, todas essas anotações são destinadas acommunicate the size of a field.

@Size e@Length são semelhantes. Podemos usar para validar o tamanho de um campo. O primeiro é aJava-standard annotatione o segundo éspecific to Hibernate.

@Column, entretanto, é umJPA annotation que usamos para controlar instruções DDL.

Agora, vamos examinar cada um deles em detalhes.

3. @Size

Para validações, usaremos@Size, uma anotação de validação de bean. Vamos usar a propriedademiddleName anotada com@Size para validar seu valor entre os atributosminemax:

public class User {

    // ...

    @Size(min = 3, max = 15)
    private String middleName;

    // ...

}

Mais importante ainda,@Size makes the bean independent of JPA and its vendors such as Hibernate. Como resultado, é mais portátil do que@Length.

4. @Length

E como acabamos de declarar,@Length é a versão específica do Hibernate de@Size. Vamos aplicar o intervalo paralastName usando@Length:

@Entity
public class User {

    // ...

    @Length(min = 3, max = 15)
    private String lastName;

    // ...

}

5. @Column(length=value)

@Column, porém, é bastante diferente.

Usaremos@Column aindicate specific characteristics of the physical database column. Vamos usar o atributolength da anotação@Column para especificar o comprimento da coluna com valor de string:

@Entity
public class User {

    @Column(length = 3)
    private String firstName;

    // ...

}

Conseqüentemente, a coluna resultante seria gerada comoVARCHAR(3)e tentar inserir uma string mais longa resultaria em um erro de SQL.

Observe que usaremos@Column apenas para especificar as propriedades da coluna da tabelaas it doesn’t provide validations.

Claro,we can use @Column together with @Size para especificar a propriedade da coluna do banco de dados com validação de bean.

@Entity
public class User {

    // ...

    @Column(length = 5)
    @Size(min = 3, max = 5)
    private String city;

    // ...

}

6. Conclusão

Neste artigo, aprendemos sobre as diferenças entre a anotação@Size, anotação@Length e o atributo@Columnlength. Examinamos cada um separadamente nas áreas de uso.

Como sempre, o código-fonte completo dos exemplos está disponívelover on GitHub.