Я пытаюсь использовать @Transactional библиотекой DeltaSpike, но у меня есть некоторые проблемы с ним. Давайте посмотрим:Использование EntityManager, уже созданного с помощью @Transactional DeltaSpike
1) У меня есть производитель DAO, который создает EntityManager с использованием настраиваемого классификатора.
@Produces
@PersistenceUnitName(value="")
public DAO criar(InjectionPoint ip) {
String persistenceUnit = "";
EntityManager em = null;
for (Annotation annotation : ip.getQualifiers()) {
if (annotation instanceof PersistenceUnitName) {
persistenceUnit = ((PersistenceUnitName) annotation).value();
}
}
em = Persistence.createEntityManagerFactory(persistenceUnit).createEntityManager();
return new DAO(em);
}
Теперь представьте себе, что я впрыснуть DAO в другом классе:
@Inject @PersistenceUnit(value="myPU01")
private DAO dao;
продюсер называется и EntityManager создается с помощью myPU01. Но внутри класса DAO у меня есть метод сохранения и я хотел бы использовать @Transactional из DeltaSpike Lib:
@Transactional
public void save(AbstractEntity entidade) {
em.persist(entidade);
em.flush();
}
Проблема здесь живет. @Transactional попытается создать еще один EntityManager, но у меня уже есть EntityManager, созданный с помощью myPU01. Я не могу поместить persistenceUnitName рядом с «save».
Вызов 'Persistence.createEntityManagerFactory (persistenceUnit)' для каждого созданного объекта кажется очень плохой идеей. –