JPA: что я должен использовать? Основной (необязательный) или столбец (обнуляемый)? - PullRequest
11 голосов
/ 09 апреля 2011

Для простого строкового поля,

@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, прежде чем фактическое обновление может быть немного быстрее.

1 Ответ

10 голосов
/ 09 апреля 2011

Из документации API:

@ Basic:

@ Основная аннотация - это простейший тип сопоставления столбцу базы данных.,Аннотация Basic может быть применена к постоянному свойству или переменной экземпляра любого из следующих типов: примитивные типы Java, обертки примитивных типов, String, java.math.BigInteger, java.math.BigDecimal, java.util.Date,java.util.Calendar, java.sql.Date, java.sql.Time, java.sql.Timestamp, byte [], Byte [], char [], Character [], enums и любой другой тип, который реализует Serializable.

@ Column

@ Column Используется для указания сопоставленного столбца для постоянного свойства или поля.Если аннотация столбца не указана, применяются значения по умолчанию.

Так что, если вы не укажете @Column, он извлекает значение столбца из метода получения / установки.Если вам нужно указать имя столбца, вы должны аннотации @Column.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...