Предметная область моделируется в приложении с помощью взаимосвязанных классов Java, называемых классами сущностей или просто сущностями.
Сущности подразделяются на две категории:
-
персистентные – экземпляры таких сущностей хранятся в таблицах базы данных
-
неперсистентные – экземпляры существуют только в оперативной памяти
Сущности характеризуются своими атрибутами. Атрибут соответствует полю класса и паре методов доступа (get / set) к полю. Чтобы атрибут был неизменяемым (read only), достаточно не создавать метод set.
Персистентные сущности могут включать в себя атрибуты, не хранящиеся в БД. В случае неперсистентного атрибута можно не создавать поле класса, ограничившись методами доступа.
Класс сущности должен удовлетворять следующим требованиям:
-
наследоваться от одного из базовых классов, предоставляемых платформой (см. ниже)
-
иметь набор полей и методов доступа, соответствующих атрибутам сущностей
-
класс и его поля (или методы доступа при отсутствии для атрибута соответствующего поля) должны быть определенным образом аннотированы для работы JPA (в случае персистентной сущности) и фреймворка метаданных
-
для поддержки возможного расширения сущностей поля класса необходимо объявлять с модификатором
protected
, а неprivate
Поддерживаются следующие типы атрибутов сущностей:
-
java.lang.String
-
java.lang.Boolean
-
java.lang.Integer
-
java.lang.Long
-
java.lang.Double
-
java.math.BigDecimal
-
java.util.Date
-
java.sql.Date
-
java.sql.Time
-
java.util.UUID
-
byte[]
-
enum
-
сущность
Базовые классы сущностей (см. ниже) переопределяют equals()
и hashCode()
таким образом, что экземпляры сущностей сравниваются по их глобальным уникальным идентификаторам (UUID). То есть экземпляры
считаются равными, если равны их идентификаторы. Глобальный уникальный идентификатор присваивается сразу после создания экземпляра
в памяти, поэтому новые экземпляры также можно сравнивать и помещать в коллекции.