executeUpdate()不刷新gridQuery中的数据

时间:2017-08-31 18:19:12

标签: java hibernate

我正在尝试使用Hibernate进行查询。我输入以下代码:

 protected void desmarcaDocumentoPrincipal(PessoaDocumentoIdentificacao documentoIdentificacao) {

        StringBuilder sb = new StringBuilder("update PessoaDocumentoIdentificacao o set o.documentoPrincipal=false ");
            sb.append("where o.pessoa = :pessoa ");
            sb.append("and o.idDocumentoIdentificacao != :idDocumentoIdentificacao");

        Query query = getEntityManager().createQuery(sb.toString());
              query.setFlushMode((javax.persistence.FlushModeType) (COMMIT));
              query.setParameter("pessoa", documentoIdentificacao.getPessoa());
              query.setParameter("idDocumentoIdentificacao", documentoIdentificacao.getIdDocumentoIdentificacao());
              query.executeUpdate();

    refreshGrid("pessoaDocumentoIdentificacaoPreCadastroGrid");
    refreshGrid("pessoaDocumentoIdentificacaoCadastroGrid");
 }

我想建立某种Flusing来进行有效的刷新,Eclipse建议插入此代码来提交更改:

query.setFlushMode((javax.persistence.FlushModeType) (COMMIT));

但之后,此查询更改的值不会在Grid组件中刷新。这是queryUpdate()

之后用于refreshGrid的方法
public void refreshGrid(String gridId) {
    StopWatch sw = null;
    if(log.isDebugEnabled()) {
        sw = new StopWatch(true);
    }
    GridQuery g = getComponent(gridId, false);
    if (g != null) {
        g.refresh();
    }
    if(log.isDebugEnabled()) {
        StringBuilder sb = new StringBuilder();
        sb.append(".refreshGrid (");
        sb.append(gridId);
        sb.append(") ");
        sb.append(getInstanceClassName());
        sb.append("): ");
        sb.append(sw.getTime());
        log.debug(sb.toString());
    }
}

这是我讨论的gridQuery的标题:

<?xml version="1.0"?> <components xmlns="http://jboss.com/products/seam/components"
                 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
                xsi:schemaLocation="http://jboss.com/products/seam/core http://jboss.com/products/seam/core-2.2.xsd
                                                  http://jboss.com/products/seam/security http://jboss.com/products/seam/security-2.2.xsd                  
                                          http://jboss.com/products/seam/components http://jboss.com/products/seam/components-2.2.xsd">   <component class="br.com.itx.component.grid.GridQuery" name="pessoaDocumentoIdentificacaoPreCadastroGrid">  <property name="ejbql">

结果显示在此屏幕上: pessoaDocumentoIdentificacaoPreCadastroGrid

1 个答案:

答案 0 :(得分:0)

我自己找到了解决方案。经过大量搜索和试用后,我终于通过将desmarcaDocumentoPrincipal语法更改为:

来完成GridQuery刷新工作。
 protected void desmarcaDocumentoPrincipal(PessoaDocumentoIdentificacao documento,Pessoa pessoa) {

     if (documento.getDocumentoPrincipal()) {
         if (!documento.getUsadoFalsamente() && documento.getAtivo() && documento.getTipoDocumento().getIdentificador() && pesquisaDocumentoPrincipal(documento) != null) {

            StringBuffer sb = new StringBuffer();
                sb.append("update tb_pess_doc_identificacao set in_principal=false ");
                sb.append("where id_pessoa = :pessoa ");
                sb.append("and id_pessoa_doc_identificacao != :idDocumentoIdentificacao");
            String sql = sb.toString();
                sql = sql.replaceAll(":pessoa", String.valueOf(documento.getPessoa().getIdPessoa()));
                sql = sql.replaceAll(":idDocumentoIdentificacao", String.valueOf(documento.getIdDocumentoIdentificacao()));

            EntityManager em = EntityUtil.getEntityManager();   
            em.createNativeQuery(sql).executeUpdate();
            em.refresh(pessoa);

        refreshGrid("pessoaDocumentoIdentificacaoPreCadastroGrid");
        refreshGrid("pessoaDocumentoIdentificacaoCadastroGrid");
        }
     }
 }

我添加了pessoa(documento属于pessoa)作为此方法的参数并对其进行了刷新。在那之后,它工作了!!