Перейти к основному содержимому

JPA @Basic Аннотация

· 3 мин. чтения

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.