Spring 原因:javax.persistence.TransactionRequiredException:执行更新/删除查询
我正在使用JSpring和JPA/Hibernate进行一个项目。我尝试调用本机查询来更新数据库。以下是错误跟踪:Spring 原因:javax.persistence.TransactionRequiredException:执行更新/删除查询,spring,hibernate,jpa,transactional,Spring,Hibernate,Jpa,Transactional,我正在使用JSpring和JPA/Hibernate进行一个项目。我尝试调用本机查询来更新数据库。以下是错误跟踪: 原因:javax.persistence.TransactionRequiredException:执行更新/删除查询 位于org.hibernate.ejb.AbstractQueryImpl.executeUpdate(AbstractQueryImpl.java:96) 在sun.reflect.NativeMethodAccessorImpl.invoke0(本机方法)处
原因:javax.persistence.TransactionRequiredException:执行更新/删除查询
位于org.hibernate.ejb.AbstractQueryImpl.executeUpdate(AbstractQueryImpl.java:96)
在sun.reflect.NativeMethodAccessorImpl.invoke0(本机方法)处
位于sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
在sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)中
位于java.lang.reflect.Method.invoke(Method.java:597)
位于org.springframework.orm.jpa.SharedEntityManagerCreator$DeferredQueryInvocationHandler.invoke(SharedEntityManagerCreator.java:311)
位于com.sun.proxy.$Proxy31.executeUpdate(未知源)
位于com.ncrm.dao.daoImpl.updateText(daoImpl.java:124)
在com.ncrm.metier.MetierImpl.UpdateExt上(MetierImpl.java:663)
登录com.ncrm.loginBean.authentication(loginBean.java:57)
在sun.reflect.NativeMethodAccessorImpl.invoke0(本机方法)处
位于sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
在sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)中
位于java.lang.reflect.Method.invoke(Method.java:597)
位于org.apache.el.parser.AstValue.invoke(AstValue.java:262)
位于org.apache.el.MethodExpressionImpl.invoke(MethodExpressionImpl.java:278)
在com.sun.faces.facelets.el.TagMethodExpression.invoke(TagMethodExpression.java:105)上
位于javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:88)
我的坚持:
<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.1" xmlns="http://xmlns.jcp.org/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence http://xmlns.jcp.org/xml/ns/persistence/persistence_2_1.xsd">
<persistence-unit name="ncrm_extraction" transaction-type="RESOURCE_LOCAL">
<!-- <class>com.ncrm.dao.entities.user</class> -->
</persistence-unit>
<persistence-unit name="BpaProduciton" transaction-type="RESOURCE_LOCAL">
<!-- <class>com.ncrm.dao.entities.user</class> -->
</persistence-unit>
</persistence>
假设您修改了DaoImpl,如下所示
@Modifying(clearAutomatically = true)
@Transactional
public int UpdateExt(String pk_obj_id_Rem,String Req) {
logger.debug("@@@ DAO : Modifier le flag EXT table remise : "+pk_obj_id_Rem );
Query q = emBpa.createNativeQuery(Req);
int flag=q.executeUpdate();
return flag;
}
希望这有帮助
有关更多详细信息,请参阅此文档。假设您修改DaoImpl,如下所示
@Modifying(clearAutomatically = true)
@Transactional
public int UpdateExt(String pk_obj_id_Rem,String Req) {
logger.debug("@@@ DAO : Modifier le flag EXT table remise : "+pk_obj_id_Rem );
Query q = emBpa.createNativeQuery(Req);
int flag=q.executeUpdate();
return flag;
}
希望这有帮助
有关更多详细信息,请参阅此部分。您正在使用的spring版本是什么?您正在使用的spring版本是什么?感谢您的所有回复,我通过添加事务名称解决了问题,因为我的应用程序上下文中有多个JpaTransactionManager谢谢您的所有回复,我通过添加事务的名称解决了这个问题,因为我的应用程序上下文中有不止一个JpaTransactionManager
@Modifying(clearAutomatically = true)
@Transactional
public int UpdateExt(String pk_obj_id_Rem,String Req) {
logger.debug("@@@ DAO : Modifier le flag EXT table remise : "+pk_obj_id_Rem );
Query q = emBpa.createNativeQuery(Req);
int flag=q.executeUpdate();
return flag;
}