3.2.1. Модель данных
Предметная область моделируется в приложении с помощью взаимосвязанных классов Java, называемых классами сущностей или просто сущностями.
Сущности подразделяются на две категории:
-  
Персистентные – экземпляры таких сущностей хранятся в таблицах базы данных с помощью ORM.
 -  
Неперсистентные – экземпляры существуют только в оперативной памяти, или сохраняются где-то с помощью иных механизмов.
 
|  
       Руководство Data Modelling: Many-to-Many Association демонстрирует различные варианты использования ассоциаций many-to-many. В руководстве Data Modelling: Composition приведены примеры композиции между сущностями.  |  
    
Сущности характеризуются своими атрибутами. Атрибут соответствует полю класса и паре методов доступа (get / set) к полю. Чтобы атрибут был неизменяемым (read only), достаточно не создавать метод set.
Персистентные сущности могут включать в себя атрибуты, не хранящиеся в БД. В случае неперсистентного атрибута можно не создавать поле класса, ограничившись методами доступа.
Класс сущности должен удовлетворять следующим требованиям:
-  
Наследоваться от одного из базовых классов, предоставляемых платформой (см. ниже).
 -  
Иметь набор полей и методов доступа, соответствующих атрибутам сущностей.
 -  
Класс и его поля (или методы доступа при отсутствии для атрибута соответствующего поля) должны быть определенным образом аннотированы для предоставления нужной информации фреймворкам JPA (в случае персистентной сущности) и метаданных.
 
Поддерживаются следующие типы атрибутов сущностей:
-  
java.lang.String -  
java.lang.Boolean -  
java.lang.Integer -  
java.lang.Long -  
java.lang.Double -  
java.math.BigDecimal -  
java.util.Date -  
java.time.LocalDate -  
java.time.LocalTime -  
java.time.LocalDateTime -  
java.time.OffsetTime -  
java.time.OffsetDateTime -  
java.sql.Date -  
java.sql.Time -  
java.util.UUID -  
byte[] -  
enum -  
Cущность
 
Базовые классы сущностей (см. ниже) переопределяют equals() и hashCode() таким образом, что экземпляры сущностей сравниваются по их идентификаторам. То есть экземпляры одного класса считаются равными, если равны их идентификаторы.