Автор оригинала: 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.