Для простого строкового поля,
@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
?
EDIT
Просто скажите, в какой форме вы бы предпочли:
Форма 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 также хороша, потому что это делается в одной аннотации.
EDIT
После прочтения http://markmail.org/message/osod6rsauwbnkvya, У меня есть разница между @Basic.optional
и @Column.nullable
. Но я до сих пор не знаю, какой из них мне следует использовать. Представляется целесообразным включить обе аннотации, поэтому сделайте базовую таблицу хорошо определенной и проверьте значение NULL в JPA, прежде чем фактическое обновление может быть немного быстрее.