Осведомлен ли прикладной контекст персистентности приложения о @ TransactionAttribute (TransactionAttributeType.REQUIRES_NEW) аннотации?Или вам нужно создать новый экземпляр Entity Manager внутри этого метода, чтобы изменения БД выполнялись в новой транзакции?
У меня есть метод, аннотированный @TransactionAttribute (TransactionAttributeType.REQUIRES_NEW).При использовании с @PersistenceContext он работает нормально, но при использовании с @PersistenceUnit нет фиксации данных в конце метода.
Мы реализовали многопользовательскую работу с JPA, создав фабрику Entity Manager, а затем создав экземпляр EM.следующим образом:
EntityManagerFactory emf = Persistence.createEntityManagerFactory("MeveoAdminMultiTenant", props);
...
EntityManager em = emf.createEntityManager();
return (EntityManager) Proxy.newProxyInstance(this.getClass().getClassLoader(), new Class<?>[] { EntityManager.class }, (proxy, method, args) -> {
currentEntityManager.joinTransaction();
return method.invoke(currentEntityManager, args);
});
Но он полностью игнорирует аннотацию транзакции_нового, даже если это транзакция диспетчера контейнеров.Он присоединяется к транзакции JTA, поэтому дополнительная транзакция start / commit / rollback не требуется.
EM создается с @ RequestScoped.
Как правильно EM, управляемому приложением, соблюдать аннотацию транзакции_новую?Нужно ли получать другой EM в этом методе?
Запуск Wildfly 10.1-Final с Hibernate 5.0.10
Спасибо