5.8.1. DataManager vs. EntityManager
И DataManager и EntityManager предназначены для операций с сущностями (CRUD). Ниже приведены различия между этими интерфейсами.
DataManager | EntityManager |
---|---|
DataManager доступен и на среднем слое и на клиентском уровне. |
EntityManager доступен только на среднем слое. |
DataManager является синглтон-бином. |
Ссылку на EntityManager необходимо получать через интерфейс Persistence. |
DataManager содержит несколько высокоуровневых методов для работы с detached сущностями: |
EntityManager в большой степени повторяет стандартный |
DataManager всегда стартует новую транзакцию внутри. |
Для работы с EntityManager необходима открытая транзакция. |
DataManager загружает частичные сущности в соответствие с представлением. |
EntityManager всегда загружает все локальные атрибуты. Если используется представление, оно влияет только на загрузку ссылочных атрибутов. |
Запросы в DataManager могут возвращать только сущности. Запросы, возвращающие одиночные атрибуты или агрегированные значения (SUM, COUNT) вызывают ошибку. |
EntityManager может выполнять любые JPQL или native запросы. |
DataManager применяет ограничения безопасности, когда вызывается с клиентского уровня. |
EntityManager не накладывает ограничения безопасности. |
При работе на клиентском уровне доступен только DataManager
. На среднем слое, используйте EntityManager
когда необходимо реализовать атомарную логику внутри транзакции или выполнить запрос, возвращающий отдельные атрибуты или агрегированные значение. В противном случае, на среднем слое можно использовать любой из интерфейсов на выбор.
Если вам нужно обойти ограничения DataManager
при работе на клиентском уровне, создайте свой сервис и используйте EntityManager
для работы с данными. В сервисе можно проверять права пользователя с помощью интерфейса Security и возвращать клиенту данные в виде персистентных или неперсистентных сущностей или произвольных значений.