Jpa @PersistenceUnit игнорирует транзакцию_новую - PullRequest
0 голосов
/ 21 мая 2018

Осведомлен ли прикладной контекст персистентности приложения о @ 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

Спасибо

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...