使用 JTA 时不能使用 EntityTransaction。使用非jta

Cannot use an EntityTransaction while using JTA. Using non-jta

我正在尝试执行 CRUD,而我的 persistence.xml 有非 JTA 数据源,但是当我尝试执行诸如创建、更新或删除之类的操作时,我收到一条消息:无法使用使用 JTA 时的 EntityTransaction

多代码示例:

@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>

根据 Transactional 注释,您似乎正在使用 Spring 的事务管理。在那种情况下,尝试通过 em.getTransaction() 手动控制交易是没有意义的。另外,我不知道你是怎么得到 EntityManager 的,但这也可能会干扰 Spring 的事务管理。

要么坚持 Spring 声明式事务管理方式(恕我直言,更好的主意),要么删除 TransactionalEntityManager 注入并自行管理 PU 和事务。