SPRING-SOURCE.RU

Основные интерфейсы

Spring основные интерфейсы

1. Интерфейс Persistence – по сути это класс. В нем практически нет методов, кроме пары статических. Один из них CreateEntityManagerFactory, то есть он создает EntityManagerFactory. Что он принимает на вход: persistence unit. По сути, он ищет percistance (конфигурацию), считывает ее и создает EntityManagerFactory на основе конфигурации. Здесь мы определяем к какой базе данных будем соединяться, логин, пароль и самое главное, в конфигурации определяется провайдер (какая конкретная реализация JPA будет использоваться). EntityManagerFactory – это интерфейс, реализация которого и есть провайдер.

2. EntityManagerFactory – это фабрика, которая содержит connection к базе, всю конфигурацию, кэш объекты итд. Суть фабрики – создавать EntityManager.

3. EntityManager – это менеджер сущностей. Он определяет сеанс взаимодействия с базой данных (один сеанс). Когда, например, нужно выполнить запрос, то мы создаем EntityManager, выполняем нужное действие, закрываем EntityManager.

Объекты EntityManager очень леговесные. Можно создавать их сколько угодно. По сути, здесь просто открывается подключение к базе днных. Может даже соединение уже будет открыто и он присоединиться к текущему.
EntityManagerFactory – фабрика и она создается долго (иницилизация всех сущностей, сканируются все классы, считываются аннотации, определяются связи итд). Поэтому фабрика должна быть одна (в основном это так). На одну базу одна фабрика.

Для чего созаны EntityManager? В нем есть один объект, который называется EntityTransaction (это интерфейс). Он определяет три метода. Begin (стартует транзакцию), commit, rollback. Также EntityManager может содержать несколько объектов Query, по сути, он их создает.

4. EntityManager содержит несколько Entity. Все Entity, которые загружаются из базы данных, например get name, будут висеть постоянно в памяти, то есть EntityManager содержит кэш этих маленьких объектов и пока EntityManager мы не закрыли, последующее обращение (get name) не полезет в базу данных.

Если рассматривать hibernate, то там есть два уровня кэша: первый – EntityManager, второй кэш - это EntityManagerFactory.

Последовательность вызова методов

  1. Persistance, создаем createEntityManagerFactory, передавая параметры Unit. На выходе имеем фабрику либо ничего.
  2. Обращаемся к фабрике и говорим “Дай мне EntityManager”
  3. Потом к EntityManager “Дай мне transaction”
  4. У transaction вызываем метод begin
  5. Обращаемся к EntityManager. Вызываем query
  6. Query. ResultList
  7. Transaction. Закрываем
  8. EntityManager. Закрываем
  9. Фабрику. Закрываем

Последовательность взаимодействия интерфейсов

Spring последовательность взаимодействия интерфейсов

Используя Spring, большинство этих действий мы вообще делать не будем. Транзакции Spring будет открывать и закрывать за нас, достаточно будет декларативно указать, что в том-то методе будет такая-то транзакция. Эта схема показывает, как бы мы работали, если бы не использовали Spring. Здесь показана работа с JPA напрямую.