2017-09-26 108 views
0

時,沒有外部管理的事務處理當前處於活動狀態當我嘗試在本地數據庫中執行更新時,但是當我執行「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並使用方法entityManager

當我執行em.getResultList()這工作正常,但是當我試圖做更新時,我有錯誤。

+1

'@TransactionAttribute(TransactionAttributeType.NOT_SUPPORTED)'** ??????? * * –

+1

刪除@TransactionAttribute(...)。 – ujulu

+0

我刪除了這個加法,我可以更新。這是一個愚蠢的錯誤,如果你願意,你可以回答這個問題,我會給你正確的答案,非常感謝。 – Allanh

回答

0

您還沒有指定一個事務管理器

你需要像

<persistence-unit name="GestionPagoTramiteUtilImplementacion" transaction-type="RESOURCE_LOCAL">> 

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

+0

嗨艾塞克斯男孩,謝謝你的回覆。我在'persistence.xml'中有一個'Persistence-unit',我添加了屬性'transaction-type =「RESOURCE_LOCAL」'但我有同樣的錯誤 – Allanh