Java Persistence / JPA: @Column vs @Basic



в чем разница между @Column и @Basic аннотации в JPA? Можно ли их использовать вместе? должны они будут использоваться вместе? Или одного из них достаточно?

770   3  

3 ответов:

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

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

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

поэтому, если мы хотели ленивую загрузку атрибута и указать имя столбца, мы можем сказать

 @Basic(fetch=FetchType.LAZY)
 @Column(name="WIBBLE")

если мы neeed по умолчанию, не ленивое поведение, то просто @Column было бы достаточно.

кроме @ djna ответ стоит отметить, что @Basic надо сравнивать с @OneToMany,@ManyToOne и @ManyToMany. Только один из них может быть указан в любом свойстве.

@Column и @JoinColumn можно указать вместе с любым из них для описания свойств столбца базы данных.

это два набора аннотаций, которые могут использоваться вместе, но только одна аннотация каждого набора может использоваться одновременно.

стоит отметить, что Basic предназначен для примитивных полей

http://en.wikibooks.org/wiki/Java_Persistence/Basic_Attributes

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

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

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

Comments

    Ничего не найдено.