Diferença entre @Size, @Length e @Column (length = value)
1. Visão geral
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.