1. Обзор
В этом кратком руководстве мы рассмотрим JSR-330 ‘s @Size , Hibernate ‘ s @Length и JPA /@Column ‘s length атрибут.
На первый взгляд, они могут показаться одинаковыми, но они выполняют разные функции . Давайте посмотрим, как это сделать.
2. Происхождение
Проще говоря, все эти аннотации предназначены для передачи размера поля.
@Size и @Length похожи. Мы можем использовать любой из них для проверки размера поля. Первый-это стандартная аннотация Java , а второй – специфичный для Hibernate .
@Column , однако, является аннотацией JPA , которую мы используем для управления операторами DDL.
Теперь давайте подробно рассмотрим каждый из них.
3. @Размер
Для проверки мы будем использовать @Size , аннотацию проверки компонента. Давайте используем свойство MiddleName с аннотацией @Size для проверки его значения между атрибутами min и max:
public class User { // ... @Size(min = 3, max = 15) private String middleName; // ... }
Самое главное, что @Size делает компонент независимым от JPA и его поставщиков, таких как Hibernate . В результате это более портативно, чем @Length .
4. @Длина
И, как мы только что сказали, @Length -это специфичная для гибернации версия @Size. Давайте применим диапазон для фамилии с помощью @Length :
@Entity public class User { // ... @Length(min = 3, max = 15) private String lastName; // ... }
5.)
@Column , однако, совсем другое дело.
Мы будем использовать @Column для указания конкретных характеристик физического столбца базы данных. Давайте использовать атрибут length аннотации @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 ‘s length . Мы рассмотрели каждый из них отдельно в пределах областей их использования.
Как всегда, полный исходный код примеров доступен на GitHub .