Невозможно использовать EntityTransaction при использовании JTA. Использование не-jta - PullRequest
0 голосов
/ 02 августа 2020
• 1000 при использовании JTA

Пример кода muy:

@Transactional
public void destroy(T entity) throws Exception
{
    EntityManager em = getEntityManager();
    try
    {
        em.getTransaction().begin();
        em.remove(em.merge(entity));
        em.getTransaction().commit();
    }
    catch(Exception e)
    {
        em.getTransaction().rollback();
        throw new Exception(e);
    }
    finally
    {
        if (em.isOpen()) 
        {
            em.close();
        }
    }
}

Моя настойчивость:

<persistence-unit name="namePU" transaction-type="RESOURCE_LOCAL">
    <non-jta-data-source>database</non-jta-data-source>
    <exclude-unlisted-classes>false</exclude-unlisted-classes>
    <properties/>
    </persistence-unit>

1 Ответ

1 голос
/ 02 августа 2020

Судя по аннотации Transactional, похоже, вы используете управление транзакциями Spring. В этом случае нет смысла пытаться вручную управлять транзакцией через em.getTransaction(). Кроме того, я не знаю, как вы получаете EntityManager, но это также может мешать управлению транзакциями Spring.

Либо придерживайтесь способа декларативного управления транзакциями Spring (IMHO лучшая идея), либо удалите Transactional и EntityManager вводят и управляют PU и транзакциями самостоятельно.

...