2. Что такое EntityManager? Какие функции он выполняет?
UNKNOWNEntityManager
Это интерфейс JPA, используемый для взаимодействия с персистентным контекстом. EntityManager описывает API для всех основных операций над Entity, а также для получения данных и других сущностей JPA. По сути - главный API для работы с JPA.
Персистентный контекст - это набор экземпляров сущностей, загруженных из БД или только что созданных. Персистентный контекст является своего рода кэшем данных в рамках транзакции - это и есть кэш первого уровня. Внутри контекста персистентности происходит управление экземплярами сущностей и их жизненным циклом.
EntityManager автоматически сохраняет в БД все изменения, сделанные в его персистентном контексте, в момент коммита транзакции, либо при явном вызове метода flush().
Один или несколько EntityManager образуют или могут образовать persistence context.
Если проводить аналогию с обычным JDBC, то EntityManagerFactory будет аналогом DataSource, а EntityManager аналогом Connection.
Создание EntityManagerFactory довольно дорогая операция, поэтому обычно её создают один раз и на всё приложение. А чаще всего не создают сами, а делегируют это фреймворку, такому как Spring, например Интерфейс Session из Hibernate представлен в JPA как раз интерфейсом EntityManager.

JPA
- EntityManagerFactory
- EntityManager
- JPQL
JDBC по аналогии
- DataSource
- Connection
Hibernate
- SessionFactory
- Session
- HQL
Основные функции EntityManager
- Операции над Entity: persist (добавление Entity под управление JPA), merge (изменение), remove (удаление), refresh (обновление данных), detach (удаление из-под управления контекста персистентности), lock (блокирование Entity от изменений в других thread).
- Получение данных: find (поиск и получение Entity), createQuery, createNamedQuery, createNativeQuery, contains, createNamedStoredProcedureQuery, createStoredProcedureQuery.
- Получение других сущностей JPA: getTransaction, getEntityManagerFactory getCriteriaBuilder, getMetamodel, getDelegate.
- Работа с EntityGraph: createEntityGraph, getEntityGraph.
- Общие операции над EntityManager или всеми Entities: close, isOpen, getProperties, setProperty, clear.
- Объекты EntityManager не являются потокобезопасными. Это означает, что каждый поток должен получить свой экземпляр EntityManager, поработать с ним и закрыть его в конце.
Предыдущий вопрос: 1. Что такое ORM? Что такое JPA? Что такое Hibernate?
Следующий вопрос: 3. Каким условиям должен удовлетворять класс, чтобы являться Entity?
Все вопросы по теме: список
Все темы: список
Вопросы/замечания/предложения/нашли ошибку: напишите мне