1. Обзор
В этом кратком руководстве мы рассмотрим атрибут @Size в JSR
- 330 , @Length
в Hibernate и атрибут length
в JPA @Column
. ``
На первый взгляд они могут показаться одинаковыми, но выполняют разные функции . Посмотрим, как.
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
— это специфичная для 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
, чтобы указать свойство столбца базы данных с проверкой bean-компонента.
@Entity
public class User {
// ...
@Column(length = 5)
@Size(min = 3, max = 5)
private String city;
// ...
}
6. Заключение
В этой статье мы узнали о различиях между аннотацией @Size, аннотацией
@Length и
атрибутом длины
@Column
. Мы рассмотрели каждый отдельно в пределах областей их использования. ``
Как всегда, полный исходный код примеров доступен на GitHub .