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