Рубрики
Без рубрики

JPA @Базовая аннотация

Узнайте, когда и как использовать аннотацию @Basic JPA.

Автор оригинала: Shubhra Srivastava.

1. Обзор

В этом кратком руководстве мы рассмотрим аннотацию JPA @Basic . Мы также обсудим разницу между аннотациями @Basic и @Column JPA.

2. Основные Типы

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

Базовый тип сопоставляется непосредственно со столбцом в базе данных. К ним относятся примитивы Java и их классы-оболочки, String , java.math.BigInteger и java.math.BigDecimal , различные доступные классы даты и времени, перечисления и любой другой тип, реализующий java.io.Serializable .

Hibernate, как и любой другой поставщик ФОРМ, поддерживает реестр основных типов и использует его для разрешения конкретного столбца org.hibernate.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;
    ...
}

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

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

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

Атрибут необязательный является логическим параметром, который определяет, позволяет ли отмеченное поле или свойство null . По умолчанию true . Таким образом, если поле не является примитивным типом, базовый столбец по умолчанию считается nullable .

Атрибут fetch принимает член перечисления Fetch , который указывает, следует ли лениво загружать отмеченное поле или свойство или извлекать его с нетерпением. По умолчанию используется FetchType.НЕТЕРПЕЛИВЫЙ , но мы можем разрешить ленивую загрузку, установив его в FetchType.LAZY.

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

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

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

@Entity
public class Course {
    
    @Id
    private int id;
    
    @Basic(optional = false, fetch = FetchType.LAZY)
    private String name;
    ...
}

Мы должны явно использовать аннотацию @Basic , когда хотим отклониться от значений по умолчанию параметров optional и fetch |. Мы можем указать один или оба этих атрибута, в зависимости от ваших потребностей.

5. JPA @Basic vs @Column

Давайте рассмотрим различия между @Basic и @Column аннотациями:

  • Атрибуты аннотации @Basic применяются к сущностям JPA, тогда как атрибуты @Column применяются к столбцам базы данных
  • @Атрибут @Basic annotations optional определяет, может ли поле сущности быть null или нет; с другой стороны, атрибут @Column annotation nullable указывает, может ли соответствующий столбец базы данных быть null
  • Мы можем использовать @Basic , чтобы указать, что поле должно быть лениво загружено
  • Аннотация @Column позволяет нам указать имя столбца сопоставленной базы данных

6. Заключение

В этой статье мы узнали, когда и как использовать аннотацию JPA @Basic . Мы также говорили о том, чем он отличается от аннотации @Column .

Как обычно, примеры кода доступны на Github.