Класс сущности должен быть помечен аннотацией @javax.persistence.entity. Должен иметь публичный или защищенный конструктор без параметров. Класс может иметь другие конструкторы. Сам класс и его элементы, используемые в механизме персистентности, не могут быть помечены как final. Если экземпляры будут использоваться в качестве параметров удаленных методов, то класс должен быть подготовлен к сериализации. Классы сущностей могут расширять как обычные классы, так и классы сущностей. Обычные классы могут расширять классы сущностей. Поля, участвующие в механизме персистентности, не могут быть публичными.
Контекст персистентности (persistencecontext) представляет собой множество экземпляров сущностей одного модуля персистентности, в котором любому постоянному идентификатору сущности соответствует единственный экземпляр сущности. В контексте хранятся экземпляры сущностей, которые были прочитаны из БД и/или которые нужно сохранить в БД.
С контекстом персистентности всегда связан экземпляр менеджера сущностей (объект типа javax.persistence.EntityManager), который управляет жизненным циклом экземпляров сущностей, находящихся в рамках данного контекста.
EntityManager API - это интерфейс, который связывает класс сущности приложения (Entity Bean) и её представления в БД. EntityManager знает как нужно добавлять сущности в БД, обновлять и удалять их, а также предоставляет механизмы для настройки производительности, кэширования, транзакций и т.д. Для этого используется язык запросов JPQL, очень похожий на SQL.
В интерфейсе EntityManager определены следующие группы методов:
* управление жизненным циклом сущностей (persist(), refresh(), remove(), merge());
* поиск экземпляра сущности по первичному ключу (find(), getReference());
* создание объектов типа Query, предназначенных для выполнения запросов (createNamedQuery(), createQuery(), createNativeQuery());
* управление контекстом персистентности (flush(), clear(), close(), getTransaction() и т.д.).