我试图在我的本地数据库中进行更新,但是当我执行" executeUpdate
"我收到了下一个错误:
javax.persistence.TransactionRequiredException:异常 描述:当前没有外部管理的事务处于活动状态 这个帖子
这是我的persistence.xml
:
<?xml version="1.0" encoding="windows-1252" ?>
<persistence 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"
version="2.0">
<persistence-unit name="GestionPagoTramiteUtilImplementacion">
<provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
<jta-data-source>jdbc/servicioswebDS</jta-data-source>
<class>modelo.Transferencias</class>
<properties>
<property name="eclipselink.target-server" value="WebLogic_10"/>
<property name="javax.persistence.jtaDataSource" value="jdbc/servicioswebDS"/>
</properties>
</persistence-unit>
</persistence>
这是班级Transferencias.java
:
@Entity
@NamedQueries({
@NamedQuery(name = "Transferencias.findAll", query = "select o from Transferencias o"),
@NamedQuery(name = "Transferencias.asociarPagoTramiteUpdate", query = "UPDATE Transferencias o SET o.usado = :p_usado , o.cdgpraradicacion = :p_codigoParaRadicacion WHERE o.trazabilitycode = :p_identificadorTransaccion")
})
public class Transferencias implements Serializable {
}
我在调用班级SessionBean
时使用Transferencias
EntityManager
@Stateless(name = "PagoTramiteSession",
mappedName = "InvimaPortafolioServicios-GestionPagoTramiteUtilImplementacion-PagoTramiteSession")
public class PagoTramiteSessionBean implements PagoTramiteSession, PagoTramiteSessionLocal {
@Resource
SessionContext sessionContext;
@PersistenceContext(unitName = "GestionPagoTramiteUtilImplementacion")
private EntityManager em;
public PagoTramiteSessionBean() {
}
@TransactionAttribute(TransactionAttributeType.NOT_SUPPORTED)
public boolean actualizarPagoTramite(BigDecimal codigoParaRadicacion, String identificadorTransaccion,
String usado) throws SQLException {
try {
Query query;
// String sql =
// "UPDATE Transferencias t " + " SET t.usado = :p_usado, " +
// "t.cdgpraradicacion = :p_codigoParaRadicacion " +
// " WHERE t.trazabilitycode = :p_identificadorTransaccion";
// query = em.createQuery(sql);
// query.setParameter("p_usado", usado);
// query.setParameter("p_codigoParaRadicacion", codigoParaRadicacion);
// query.setParameter("p_identificadorTransaccion", identificadorTransaccion);
// int retorno = query.executeUpdate();
// if (retorno >= 1) {
// return true;
// } else {
// return false;
// }
query = em.createNamedQuery("Transferencias.asociarPagoTramiteUpdate");
query.setParameter("p_usado", usado);
query.setParameter("p_codigoParaRadicacion", codigoParaRadicacion);
query.setParameter("p_identificadorTransaccion", identificadorTransaccion);
int retorno = query.executeUpdate();
if (retorno >= 1) {
return true;
} else {
return false;
}
} catch (Exception e) {
System.out.println(e);
}
return false;
}
}
我尝试以两种方式执行更新,使用nativeQuery
并使用createQuery
方法entityManager
。{/ p>
当我执行em.getResultList()
时,这很好用,但是当我尝试更新时,我有错误。
答案 0 :(得分:0)
您尚未指定交易管理器
你需要像
这样的东西<persistence-unit name="GestionPagoTramiteUtilImplementacion" transaction-type="RESOURCE_LOCAL">>
请参阅http://www.eclipse.org/eclipselink/documentation/2.5/solutions/testingjpa002.htm