Перейти к основному содержимому

Разница между @Size, @Length и @Column (длина = значение)

· 2 мин. чтения

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 .