Ответы:
@Basic
означает, что атрибут должен быть сохранен и должно использоваться стандартное отображение. У него есть параметры, которые позволяют указать, должен ли атрибут загружаться лениво и допускать ли его значение NULL.
@Column
позволяет указать имя столбца в базе данных, в котором должен быть сохранен атрибут.
Если вы укажете одно без другого, вы получите разумное поведение по умолчанию, поэтому обычно люди используют только один, за исключением особых случаев.
Итак, если нам нужна ленивая загрузка атрибута и указание имени столбца, мы можем сказать
@Basic(fetch=FetchType.LAZY)
@Column(name="WIBBLE")
Если бы нам нужно было по умолчанию неленивое поведение, этого @Column
было бы достаточно.
Помимо ответа @djna стоит отметить, что @Basic
следует сравнивать с @OneToMany
, @ManyToOne
и @ManyToMany
. Только один из них может быть указан для любого свойства.
@Column
и @JoinColumn
может быть указан вместе с любым из них для описания свойств столбца базы данных.
Это два набора аннотаций, которые можно использовать вместе, но одновременно можно использовать только одну аннотацию каждого набора.
Стоит отметить, что Basic предназначен для примитивных полей.
http://en.wikibooks.org/wiki/Java_Persistence/Basic_Attributes
Базовый атрибут - это атрибут, класс атрибута которого представляет собой простой тип, например String, Number, Date или примитив. Значение базового атрибута может напрямую отображаться на значение столбца в базе данных.
Поддерживаемые типы и преобразования зависят от реализации JPA и платформы базы данных. Любой базовый атрибут, использующий тип, который не отображается напрямую на тип базы данных, может быть сериализован в двоичный тип базы данных.
Самый простой способ сопоставить базовый атрибут в JPA - ничего не делать. Любые атрибуты, которые не имеют других аннотаций и не ссылаются на другие сущности, будут автоматически сопоставлены как базовые и даже сериализованные, если не базовый тип. Имя столбца для атрибута будет задано по умолчанию, названо так же, как имя атрибута, в верхнем регистре.
Аннотации @Basic применяются к объектам JPA, а аннотации @Column применяются к столбцам базы данных. Необязательный атрибут аннотации @Basic определяет, может ли поле объекта иметь значение NULL или нет; с другой стороны,
@Basic
без@Column
, именно поэтомуoptional
иnullable
свойства существуют в обоих. Я прав?