«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

Мы можем использовать аннотацию @Basic для обозначения свойства базового типа:

@Entity
public class Course {

    @Basic
    @Id
    private int id;

    @Basic
    private String name;
    ...
}

Другими словами, аннотация @Basic на поле или свойстве означает, что это базовое свойство. type и Hibernate должны использовать стандартное сопоставление для его сохранения.

Обратите внимание, что это необязательная аннотация. Таким образом, мы можем переписать нашу сущность Course следующим образом:

@Entity
public class Course {

    @Id
    private int id;

    private String name;
    ...
}

Когда мы не указываем аннотацию @Basic для атрибута базового типа, это неявно предполагается, и применяются значения по умолчанию для этой аннотации.

4. Зачем использовать аннотацию @Basic?

Аннотация @Basic имеет два атрибута: необязательный и выборочный. Давайте подробнее рассмотрим каждый из них.

Необязательный атрибут — это логический параметр, определяющий, допускает ли отмеченное поле или свойство значение NULL. По умолчанию оно равно true. Таким образом, если поле не является примитивным типом, предполагается, что базовый столбец по умолчанию допускает значение NULL.

Атрибут fetch принимает член перечисления Fetch, который указывает, должно ли помеченное поле или свойство загружаться лениво или нетерпеливо. По умолчанию используется FetchType.EAGER, но мы можем разрешить ленивую загрузку, установив для него значение FetchType.LAZY.

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

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

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

@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.

«