此线程当前没有外部管理的事务处于活动状态(仅持久查询!!)

时间:2016-07-28 21:17:30

标签: jpa persistence jta spring-transactions transactionmanager

您好我一直在使用GlassFish服务器上的Spring 4和EclipseLink的Web应用程序。 我在myF服务器上使用了wampserver,在GlassFish上使用了连接池。

这是我的persistence.xml

<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.0" xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd">
    <persistence-unit name="NetworkAdministrationBD_pu" transaction-type="JTA">
        <jta-data-source>networkadminDB2</jta-data-source>
        <class>tn.insat.entities.Administrateur</class>
        <class>tn.insat.entities.Responsable</class>
    </persistence-unit>
</persistence>

我的DAO bean“AdministrateurDAOImpl”注释了@Repository(“administrateurDao”)

我的spring配置xml文件是:

    <context:annotation-config/>
    <context:component-scan base-package="tn.insat.dao" />
    <context:component-scan base-package="tn.insat.web"/>
    <context:component-scan base-package="tn.insat.service"/>
    <tx:annotation-driven/>

    <bean id="entityManagerFactory"
          class="org.springframework.orm.jpa.LocalEntityManagerFactoryBean">
        <property name="persistenceUnitName" value="NetworkAdministrationBD_pu"/>
    </bean>

   ...

EntityManager正确地注入了administrateurDao bean:

 private EntityManager em;

    @PersistenceContext
    public void setEm(EntityManager em) {
        this.em = em;
    }

当在JPQL中执行非持久性查询或直接通过EntityManager方法(em.find())时,“administrateurDao”对象可以正常工作

但是,当执行持久性查询时(例如em.remove()),我得到了上述异常。

删除方法表单“administrateurDao”如下所示:

try{ 
Query query = em.createQuery("DELETE FROM Administrateur a WHERE a.id = :id");
            query.setParameter("id", id);
            query.executeUpdate();
}
catch (Exception e){
throw new DAOException() ;
}

经过一些调试和测试后,我发现错误是在

处引发的
query.executeUpdate();

命令。

我不知道它是否相关,但GWT RPC服务使用“administrateurDao”存储库bean。

我已经浏览过所有互联网问题和文档,但没有人提出解决方案,无需将transaction_type从JTA更改为RESOURCE_LOCAL或切换孔持久层。

同时添加@Transactional注释会引发另一个异常:

Exception Description: Cannot use an EntityTransaction while using JTA.

我被困了太久,有什么想法吗?

0 个答案:

没有答案