2011-09-08 2 views
0

프로 시저를 호출 한 후 프로 시저를 호출하여 변경된 개체를 찾기 위해 검색하지만 값이 이미 변경된 대신 동일한 값으로 변경했습니다 데이터베이스에.오라클 및 Seam 트랜잭션 문제

@Begin(join=true, flushMode=FlushModeType.COMMIT) 
public String validarArquivo() throws Exception 
{ 
    if(arquivoImportacaoId != null) 
    { 
     importarArquivoTransacaoBusiness.validarArquivo(arquivoImportacaoId, seamSession.getIdUsuario()); 

     arquivoImportacaoId = null; 
    }  

    //buscarArquivosImportacao(); 

    statusValidaArquivo = 1; 

    return "sucesso"; 
} 

가 DAO :이 Methos는이 호출

em.createNativeQuery("{call PRC_PROCESSAR_ARQUIVO (" + arquivoImportacaoId + ", " + UsuarioId + ") }").executeUpdate();  
em.flush(); 
em.joinTransaction(); 

DAO를 실행 후 :

@In(create = true) 
EntityManager em; 

public List<ArquivoImportacao> buscarArquivoTransacao(ImportarArquivoTransacaoForm importarArquivoTransacaoForm) throws Exception{  

    em.flush(); 
    em.joinTransaction(); 

    List<ArquivoImportacao> lstArquivoImportacao = new ArrayList<ArquivoImportacao>(); 

    StringBuilder strQuery = new StringBuilder();  

    strQuery.append("select a from ArquivoImportacao a where 1=1 "); 

    strQuery.append("and a.status <> 'CAN' "); 

    if(importarArquivoTransacaoForm != null) 
    {   

     if (importarArquivoTransacaoForm.getIdArquivo() != null) 
      strQuery.append("and a.idImportacao = :idImportacao "); 

     if (importarArquivoTransacaoForm.getLote() != null) 
      strQuery.append("and a.numeroLote = :pNumeroLote "); 

     if (importarArquivoTransacaoForm.getNomeArquivo() != null && !importarArquivoTransacaoForm.getNomeArquivo().trim().equals("")) 
      strQuery.append("and lower(a.nomeArquivo) like lower(:pNomeArquivo) "); 

     if (importarArquivoTransacaoForm.getCnpj() != null && !Util.clearNumber(importarArquivoTransacaoForm.getCnpj()).equals("")) 
      strQuery.append("and a.cliente.cnpj = :pCnpj "); 

     if (importarArquivoTransacaoForm.getDataProcessamento() != null) 
      strQuery.append("and a.dataProcessamento >= :pDataProcessamento "); 

     if (importarArquivoTransacaoForm.getDataProcessamentoAte() != null) 
      strQuery.append("and a.dataProcessamento < :pDataProcessamentoAte "); 

     if (importarArquivoTransacaoForm.getStatus() != null && !importarArquivoTransacaoForm.getStatus().equals("")) 
      strQuery.append("and a.status = :pStatus "); 

     //ordenação da query 
     strQuery.append("order by a.numeroLote"); 

     Query query = em.createQuery(strQuery.toString()); 

     if (importarArquivoTransacaoForm.getIdArquivo() != null) 
      query.setParameter("idImportacao", importarArquivoTransacaoForm.getIdArquivo()); 

     if (importarArquivoTransacaoForm.getLote() != null) 
      query.setParameter("pNumeroLote", importarArquivoTransacaoForm.getLote()); 

     if (importarArquivoTransacaoForm.getNomeArquivo() != null && !importarArquivoTransacaoForm.getNomeArquivo().trim().equals("")) 
      query.setParameter("pNomeArquivo", "%" + importarArquivoTransacaoForm.getNomeArquivo() + "%"); 

     if (importarArquivoTransacaoForm.getCnpj() != null && !Util.clearNumber(importarArquivoTransacaoForm.getCnpj()).equals("")) 
      query.setParameter("pCnpj", Util.clearNumber(importarArquivoTransacaoForm.getCnpj())); 

     if (importarArquivoTransacaoForm.getDataProcessamento() != null) 
      query.setParameter("pDataProcessamento", importarArquivoTransacaoForm.getDataProcessamento()); 

     if (importarArquivoTransacaoForm.getDataProcessamentoAte() != null) 
     { 
      Calendar cal = Calendar.getInstance(); 

      cal.setTime(importarArquivoTransacaoForm.getDataProcessamentoAte()); 

      cal.add(Calendar.DAY_OF_MONTH, 1); //Adiciona Um dia   

      cal.set(Calendar.HOUR, 0); 
      cal.set(Calendar.MINUTE, 0); 
      cal.set(Calendar.SECOND, 0); 
      cal.set(Calendar.MILLISECOND, 0); 

      query.setParameter("pDataProcessamentoAte", cal.getTime()); 
     }   

     if (importarArquivoTransacaoForm.getStatus() != null && !importarArquivoTransacaoForm.getStatus().equals("")) 
      query.setParameter("pStatus", importarArquivoTransacaoForm.getStatus()); 

     lstArquivoImportacao = query.getResultList(); 
    } 
    else 
    { 
     strQuery.append("order by a.numeroLote"); 

     Query query = em.createQuery(strQuery.toString()); 
     lstArquivoImportacao = query.getResultList();   
    } 

    return lstArquivoImportacao; 
} 

하지만 값이 변경되지

내 제어기는 변경 값을받을 , 내가 검색 방법을 호출 버튼에 "propagation : none"태그를 넣으면 값이 변경된 것을 볼 수 있지만 양식에서 매개 변수를 잃어 버렸습니다.

누군가가 단서가 있습니까?

나는 많은 곳에서 엔티티 관리자를 플러시 및 거래 유형을 변경하려고했지만 값은 전파 = "없음"

답변

0

비트 그리 쉬운 일이 아니다 대와 링크에 클릭으로 변경 비 포르투갈어 (?) - 화자를위한 읽기 ;-)

코드를 올바르게 이해하면 저장 프로 시저 호출을 통해 관리되는 개체가 변경됩니다. 이렇게하면 지속성 컨텍스트가 업데이트되지 않습니다. 즉,이 개체와 관련하여 아무런 효과가 없어야합니다.

터치하기 전에 명시 적으로 새로 고침하면 문제가 해결됩니다 (em.refresh()).

).