您好我一直在使用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.
我被困了太久,有什么想法吗?