@PersistenceContext(unitName = "XXXX")
private EntityManager entityManager;
Это должно быть сделано в каждом конкретном классе, абстрактный должен реализовывать конкретную операцию, используя
getEntityManager().doSomething(entity)
получатель getEntityManager()
, являющийся абстрактным.
Имхо этозапах дизайна, EntityManager
- это уже абстракция, и вам нечего его заключить.
[ edit ]
Относительно "фабричного" подхода, способав CDI для динамического внедрения ресурсов используется producer methods
.
. Вы можете создать метод, возвращающий экземпляр EntityManager
, который будет динамически разрешать EntityManagerFactory
в соответствии с именем единицы сохраняемости (см. пример * 1020).* here ).
Обратите внимание, что это очень плохая идея, поскольку область действия entityManager
обычно привязана к транзакции, что позволяет контейнеру внедрить экземпляр entityManager
, гарантирующий, что область действия будетбыть правильно обработанным (контейнером).Единственная жизнеспособная конфигурация с этим подходом - это когда вам нужно «управляемое приложение» entityManager
Примечание: обратите внимание, что данный пример будет создавать новый экземпляр EntityManageFactory
для каждой инъекции, который может быть действительно катастрофическим в соответствии скак вы его используете (EntityManageFactory
должен быть создан один раз для всех приложений)
обязательно ознакомьтесь с жизненным циклом EntityManager , прежде чем идти дальше.