使用 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 声明式事务管理方式(恕我直言,更好的主意),要么删除 Transactional
和 EntityManager
注入并自行管理 PU 和事务。
我正在尝试执行 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 声明式事务管理方式(恕我直言,更好的主意),要么删除 Transactional
和 EntityManager
注入并自行管理 PU 和事务。