Что атрибут длины делает, когда установлено на @Column JPA annontation?

Что точно делает установку длины на столбце, делают в JPA?

@Column(name = "middle_name", nullable = false, length = 32)
public String getMiddleName() {
    return this.middleName;
}

Я понимаю, что можно использовать аннотации для генерации схемы базы данных (DDL) на основе объектов объекта, но длина делает какой-либо вид проверки или усечения, когда персистентность происходит, или это только использовало для создания схемы?

Я также понимаю, что JPA может находиться сверх различных реализаций, реализация, в которой я обеспокоен в этом случае, в спящем режиме.

57
задан Manuel Drieschmanns 7 November 2017 в 04:41
поделиться

1 ответ

Выполняется ли длина какой-либо проверки или усечения, когда происходит сохранение, или она используется исключительно для создания схемы?

Атрибут length аннотации Столбец используется для указания :

Длина столбца. (Применяется только в том случае, если используется столбец со строковыми значениями.)

И используется только в сгенерированном DDL. В вашем примере результирующий столбец будет сгенерирован как VARCHAR (32) , и попытка вставить более длинную строку приведет к ошибке SQL.


Для проверки вы можете добавить ограничение @Size (max = 32) из Bean Validation API ( JSR 303 ). Я предоставил образец с работающим тестом здесь .

Указание как размера , так и длины может показаться избыточным, но согласно Приложению D. спецификации Bean Validation, создание DDL с учетом проверки Bean-компонента не обязательно для поставщиков сохраняемости. Поэтому используйте длину для DDL, @Size для проверки.

Если вам интересно, просто поместите реализацию Bean Validation в путь к классам с JPA 2.0. Для JPA 1.0 см. Этот предыдущий ответ .

80
ответ дан 7 November 2019 в 06:08
поделиться
Другие вопросы по тегам:

Похожие вопросы: