4.2.1. Модель данных
Предметная область моделируется в приложении с помощью взаимосвязанных классов 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() таким образом, что экземпляры сущностей сравниваются по их идентификаторам. То есть экземпляры считаются равными, если равны их идентификаторы.