Разлика между @Size, @Length и @Column (дължина = стойност)

1. Общ преглед

В този кратък урок, ние ще се погледнете в JSR-330 е @Size , Hibernate на @Length и СПА @column е с дължина атрибут.

Отначало те могат да изглеждат еднакви, но изпълняват различни функции . Да видим как.

2. Произход

Просто казано, всички тези анотации са предназначени да съобщават размера на полето.

@Size и @Length са сходни. Можем да използваме и двете, за да проверим размера на полето. Първата е стандартна анотация на Java, а втората е специфична за Hibernate.

@Column обаче е JPA анотация, която използваме за контрол на DDL изрази.

Сега, нека да разгледаме всеки от тях в детайли.

3. @ Размер

За валидиране ще използваме @Size , анотация за проверка на боб. Да използваме имот middleName анотиран с @Size да потвърди своята стойност между атрибути мин и макс:

public class User { // ... @Size(min = 3, max = 15) private String middleName; // ... }

Най-важното е, че @Size прави боб независим от JPA и неговите доставчици като Hibernate . В резултат на това това е по-преносимо от @Length .

4. @ Дължина

И както току-що посочихме, @Length е специфичната за Hibernate версия на @Size. Нека наложим диапазона за lastName, като използваме @Length :

@Entity public class User { // ... @Length(min = 3, max = 15) private String lastName; // ... }

5. @ колона (дължина = стойност)

@Column обаче е съвсем различен.

Ще използваме @Column, за да посочим специфични характеристики на физическата колона на базата данни. Нека използваме атрибута за дължина на анотацията @Column, за да определим дължината на колоната със стойност:

@Entity public class User { @Column(length = 3) private String firstName; // ... }

Следователно, получената колона ще бъде генерирана като VARCHAR (3) и опитът за вмъкване на по-дълъг низ ще доведе до SQL грешка.

Обърнете внимание, че ще използваме @Column само за задаване на свойствата на колоната на таблицата, тъй като не предоставя проверки.

Разбира се, можем да използваме @Column заедно с @Size, за да посочим свойството на колоната на базата данни с валидиране на боб.

@Entity public class User { // ... @Column(length = 5) @Size(min = 3, max = 5) private String city; // ... }

6. Заключение

В това описание научихме за разликите между анотацията @Size, анотацията @Length и атрибута за дължина на @Column . Разгледахме всеки поотделно в областите на тяхното използване.

Както винаги, пълният изходен код на примерите е достъпен в GitHub.