我正在尝试使用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
答案 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)作为此方法的参数并对其进行了刷新。在那之后,它工作了!!