1. Обзор
В этом кратком руководстве мы рассмотрим аннотацию JPA @Basic
. Мы также обсудим разницу между аннотациями @Basic
и @Column
JPA.
2. Основные типы
JPA поддерживает различные типы данных Java в качестве сохраняемых полей объекта, часто называемых базовыми типами.
Базовый тип сопоставляется непосредственно со столбцом в базе данных. К ним относятся примитивы Java и их классы-оболочки, String
, java.math.BigInteger
и java.math.BigDecimal
, различные доступные классы даты и времени, перечисления и любой другой тип, который реализует java.io.Serializable
.
Hibernate, как и любой другой поставщик ORM, поддерживает реестр базовых типов и использует его для разрешения конкретного столбца org.hibernate.type.Type
.
3. @Базовая
аннотация
Мы можем использовать аннотацию @Basic
для обозначения свойства базового типа:
@Entity
public class Course {
@Basic
@Id
private int id;
@Basic
private String name;
...
}
Другими словами, аннотация @Basic
для поля или свойства означает, что это базовый тип, и Hibernate должен использовать стандартное сопоставление для его сохранения.
Обратите внимание, что это необязательная аннотация. Итак, мы можем переписать сущность нашего курса следующим образом:
@Entity
public class Course {
@Id
private int id;
private String name;
...
}
Когда мы не указываем аннотацию @Basic
для атрибута базового типа, она подразумевается неявно, и применяются значения этой аннотации по умолчанию.
4. Зачем использовать аннотацию @Basic
?
Аннотация @Basic
имеет два атрибута: необязательный
и выборочный
. Давайте подробнее рассмотрим каждый из них.
Необязательный
атрибут — это логический параметр
, который определяет, допускает ли отмеченное поле или свойство значение null
. По умолчанию оно равно true
. Таким образом, если поле не является примитивным типом, предполагается, что базовый столбец по умолчанию допускает значение NULL .
Атрибут fetch
принимает член перечисления Fetch
, который указывает, должно ли помеченное поле или свойство загружаться лениво или нетерпеливо. По умолчанию используется FetchType.EAGER
, но мы можем разрешить ленивую загрузку, установив для него значение FetchType.LAZY.
Ленивая загрузка будет иметь смысл только тогда, когда у нас есть большой Serializable
объект, отображаемый как базовый тип, так как в этом случае стоимость доступа к полю может быть значительной.
У нас есть подробное руководство, посвященное нетерпеливой/ленивой загрузке в Hibernate , в котором более подробно рассматривается эта тема.
Теперь предположим, что мы не хотим допускать пустые значения
для имени
нашего курса
и также хотим лениво загружать это свойство. Затем мы определим сущность нашего курса как:
@Entity
public class Course {
@Id
private int id;
@Basic(optional = false, fetch = FetchType.LAZY)
private String name;
...
}
Мы должны явно использовать аннотацию @Basic,
когда хотим отклониться от значений по умолчанию для необязательных
параметров и параметров выборки
. Мы можем указать один или оба этих атрибута, в зависимости от наших потребностей.
5. JPA @Basic
против @Column
Давайте посмотрим на различия между аннотациями @Basic
и @Column
:
- Атрибуты аннотации
@Basic
применяются к объектам JPA, тогда как атрибуты@Column
применяются к столбцам базы данных. - `
атрибут аннотации
@Basicопределяет, может ли поле объекта быть
пустымили нет; с другой стороны,
атрибут nullableаннотации
@Columnуказывает, может ли соответствующий столбец базы данных быть
нулевым` - Мы можем использовать
@Basic
, чтобы указать, что поле должно быть загружено лениво. Аннотация @Column
позволяет указатьимя
сопоставленного столбца базы данных.
6. Заключение
В этой статье мы узнали, когда и как использовать аннотацию JPA @Basic
. Мы также говорили о том, чем она отличается от аннотации @Column
.
Как обычно, примеры кода доступны на Github.