«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.