Для простого строкового поля
@Entity
class Foo {
//1. @Basic(optional = false)
//2. @Column(length = 100, nullable = false)
String name;
}
Мне нужно ограничить длину имени, используя аннотацию @Column, но меня путают с атрибутом nullable. Хотя я использую другие аннотации, такие как @ManyToOne и @OneToMany, которые используют атрибуты optional, я хотел бы использовать @Basic(optional), чтобы сохранить большинство аннотаций единообразными. Но я не могу ограничить длину имени @Basic.
Итак, где я должен аннотировать атрибут nullable, @Basic или @Column?
ИЗМЕНИТЬ
Просто скажите, в какой форме вы бы предпочли:
Форма 1:
@Entity
class Foo {
@Basic(optional = false)
@Column(length = 100)
String name;
}
Форма 2:
@Entity
class Foo {
@Column(length = 100, nullable = false)
String name;
}
Хорошо лично мне нравится форма 1, потому что атрибут optional также используется аннотациями @ManyToOne и т.д., но форма 2 также хороша, потому что это делается в одиночной аннотации.
ИЗМЕНИТЬ
После чтения http://markmail.org/message/osod6rsauwbnkvya у меня есть разница между @Basic.optional и @Column.nullable. Но я до сих пор не знаю, какой из них я должен использовать. Кажется хорошим включить оба аннотации, поэтому четко определите базовую таблицу и проверьте значение null в JPA, прежде чем фактическое обновление может быть немного быстрее.