Что делает атрибут length при установке на @ Column JPA annontation?
что именно делает установка длины столбца в JPA?
@Column(name = "middle_name", nullable = false, length = 32)
public String getMiddleName() {
return this.middleName;
}
Я понимаю, что вы можете использовать аннотации для создания схемы базы данных (DDL) на основе объектов сущности, но делает ли length какую-либо проверку или усечение, когда происходит сохранение, или он используется исключительно для создания схемы?
Я также понимаю, что JPA может сидеть поверх различных реализаций, реализация, с которой я связан в этом случае, является Hibernate.
4 ответа:
делает ли length какую-либо проверку или усечение, когда происходит сохранение, или он используется только для создания схемы?
The
length
наColumn
аннотация используется для указания:длина колонны. (Применяется только в том случае, если используется столбец со строковым значением.)
и используется только в сгенерированном DDL. В вашем примере, результирующий столбец будет сгенерирован как
VARCHAR(32)
и попытка вставить более длинную строку приведет к ошибке SQL.
для проверки вы можете добавить
@Size(max=32)
ограничения из API проверки бобов ( JSR 303). Я предоставил образец с запускаемым тестом здесь.обеспечения как
Size
иlength
может показаться излишним, но в соответствии с Приложение D. спецификации проверки Bean, генерирующей DDL с поддержкой проверки Bean не является обязательно для поставщиков сохраняемости. Так что используйтеlength
для DDL,@Size
для проверки.в случае, если вы заинтересованы, просто поместите реализацию проверки Bean на classpath с JPA 2.0. С JPA 1.0, обратитесь к этому предыдущий ответ.
@столбец(длина=32) предназначен только для целей DDL, а не для ограничения средств он позволяет более 32 символов, если на уровне таблицы это не так restricted.To ограничьте размер мы shold идем для @size (max=32)
Hibernate 4.3.11 (и другие версии) следует обратить внимание на аннотации проверки. - так что вам, возможно, придется обновить
это цитаты из Hibernate 4.3.11 руководство
Глава 22.Дополнительные модули
Hibernate Core также предлагает интеграцию с некоторыми внешними модули/проекты. Это включает в себя Hibernate Validator ссылку реализация проверки бобов (JSR 303) и гибернации Поиск.
... Интеграция между проверкой Hibernate и Bean работает на двух уровнях уровни. Во-первых, он может проверять экземпляры класса в памяти для нарушение ограничения. Во-вторых, он может применять ограничения к Hibernate метамодель и включить их в созданную базу данных схема. ...
Глава 22.1.4 База Данных схема
Hibernate использует ограничения проверки Bean для создания точной схемы базы данных:
@NotNull leads to a not null column (unless it conflicts with components or table inheritance) @Size.max leads to a varchar(max) definition for Strings @Min, @Max lead to column checks (like value <= max) @Digits leads to the definition of precision and scale (ever wondered which is which? It's easy now with @Digits :) )
Примечание: @Lengh тоже работает, как @Size
когда вы используете Hibernate Validator 5.1-тогда вам также нужна реализация el. Например
<dependency> <groupId>org.glassfish.web</groupId> <artifactId>el-impl</artifactId> <version>2.2</version> </dependency>
если у вас этого нет, то Hibernate ORM не сможет запустить проверку Hibernate, поэтому ad это не займет (все) JSR-303 например
@Length
,@Size
в счет!