当我尝试进行更新时,此线程当前没有外部管理的事务处于活动状态

时间:2017-09-26 15:06:19

标签: java jpa ejb weblogic entitymanager

我试图在我的本地数据库中进行更新,但是当我执行" 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()时,这很好用,但是当我尝试更新时,我有错误。

1 个答案:

答案 0 :(得分:0)

您尚未指定交易管理器

你需要像

这样的东西
<persistence-unit name="GestionPagoTramiteUtilImplementacion" transaction-type="RESOURCE_LOCAL">>

请参阅http://www.eclipse.org/eclipselink/documentation/2.5/solutions/testingjpa002.htm