Tabela duplicando registro[RESOLVIDO]

Olá.

Toda vez que faço uma alteração no cadastro ou adiciono uma permissão para o usuário quando pesquisa esse usuário novamente ele lista as permissão duplicada.Alguém tem alguma ideia do que pode ser.

Segue meu bean

@ManagedBean(name = "usuarioMB")

@ViewScoped
public class UsuarioBean implements Serializable {
private Usuario usuario;

private List<Empresa> empresas;
private List<CentroCusto> centrosCusto;
private List<Programa> programas;
private List<Usuario> usuariosPesquisados;
private List<Permissao> permissoes;
private List<Usuario> usuariosDe;
private List<Usuario> usuariosPara;
private List<Sistema> sistemas;
private List<DepartamentoProjetos> dpProjetos;

private UsuarioDAO usuarioDAO;
private EmpresaDAO empresaDAO;
private CentroCustoDAO centroCustoDAO;
private ProgramaDAO programaDAO;
private PermissaoDAO permissaoDAO;
private SistemaDAO sistemaDAO;
private DepartamentoProjetosDAO departamentoProjetosDAO;

private int pesquisa;
private int usuarioDe;
private int usuarioPara;
private String usuarioPesquisa;
private String conteudoPesquisa;
private String verificaSenha;
private String confirmaEmail;
private String confirmaSenha;
private String senhaAux = "";
private boolean somenteLeitura;
private boolean podeSalvar;
private boolean statusNovo;
private boolean statusSalvar;
private boolean statusPesquisar;
private boolean statusCancelar;
private boolean isNovo;
private boolean showDialog;

public UsuarioBean() {
    this.usuario = new Usuario();
    usuario.setDepartamentoProjetos(new DepartamentoProjetos());
    this.usuarioDAO = new UsuarioDAO();
    this.empresaDAO = new EmpresaDAO();
    this.centroCustoDAO = new CentroCustoDAO();
    this.programaDAO = new ProgramaDAO();
    this.permissaoDAO = new PermissaoDAO();
    this.sistemaDAO = new SistemaDAO();
    this.departamentoProjetosDAO = new DepartamentoProjetosDAO();
    this.pesquisa = 1;
    //this.usuarioPesquisa = "";
    this.usuariosPesquisados = new ArrayList<Usuario>();
    this.permissoes = new ArrayList<Permissao>();
    this.dpProjetos = new ArrayList<DepartamentoProjetos>();
    this.somenteLeitura = false;
    this.confirmaEmail = "";
    this.confirmaSenha = "";
    this.statusNovo = false;
    this.statusPesquisar = false;
    this.statusSalvar = true;
    this.statusCancelar = true;
    this.showDialog = false;

    listarEmpresas();
    listarCentroCusto();
    listarProgramas();
    listarDepartamentoProjetos();

}

/**
 * Metodo que lista permissões de usuario
 *
 * @param id
 */
public void listarPermissoes(int id) {
    permissoes = permissaoDAO.listarPermissao(id);
}

public void listarSistemas() {
    sistemas = sistemaDAO.getSistemaByPesquisa(pesquisa, conteudoPesquisa);
}

/**
 * metodo testa se as senhas são equivalentes
 */
public void senhaEquivalente() {
    if (!usuario.getSenha().equals(this.confirmaSenha)) {
        this.confirmaSenha = "";
        UtilSistemas.mostrarMensagemErro("Campo inválido", "Senha incorreta!");
    }
}

/**
 * Método que verifica se o email é válido
 */
public void validarEmail() {
    if (!UtilSistemas.isEmailValido(usuario.getEmail())) {
        UtilSistemas.mostrarMensagemErro("Campo inválido", "Email incorreto!");
    }
}

/**
 * metodo testa se os emails digitados sao equivalentes
 */
public void emailEquivalente() {
    if (!usuario.getEmail().equals(this.confirmaEmail)) {
        this.confirmaEmail = "";
        UtilSistemas.mostrarMensagemErro("Email não validou", "Os emails não são equivalentes");

    }
}

/**
 * valida o cpf na view
 *
 */
public void validaCPF() {
    this.usuariosPesquisados = usuarioDAO.getUsuarioByPesquisa(3, usuario.getCPF());
    try {
        if (!UtilSistemas.isCPF(usuario.getCPF())) {
            usuario.setCPF("");
            throw new Exception("CPF Inválido");
        } else if (!usuariosPesquisados.isEmpty()) {
            usuario = usuarioDAO.getUsuarioByCPF(usuario.getCPF());

            if (usuario.getDepartamentoProjetos() == null) {
                usuario.setDepartamentoProjetos(new DepartamentoProjetos());
            }
            this.senhaAux = usuario.getSenha();
            this.somenteLeitura = true;
            listarPermissoes(usuario.getSeq());
            throw new Exception("CPF Já Cadastrado");
        }
    } catch (Exception e) {
        UtilSistemas.mostrarMensagemAlerta("Atenção!", e.getMessage());
    }
}

/**
 * Metodo que retorna uma lista de departamentos de projeto
 */
public void listarDepartamentoProjetos() {
    dpProjetos = departamentoProjetosDAO.listarDepartamentos();
}

/**
 * metodo verfica se o login esta cadastrado na base de dados
 */
public void validaLogin() {
    String str = usuario.getUserName();
    int idx = str.indexOf(" ");   //- 1 verdadeiro não tem espaço
    Usuario user = usuarioDAO.getUsuarioByLogin(usuario.getUserName());
    try {
        if (idx != -1) {
            throw new Exception("O nome de Usuário não deve conter espaços");
        } else if (usuario.getUserName().length() < 3) {
            throw new Exception("Usuário deve ter no minimo 3 digitos");
        }
        if (user.getUserName() != null) {
            throw new Exception("Usuario ja esta cadastrado");
        }

    } catch (Exception e) {
        usuario.setUserName("");
        UtilSistemas.mostrarMensagemErro("Erro", e.getMessage());
    }

}

/**
 * Método que valida os campos do cadastro
 *
 * @return
 */
public boolean isCamposValidos() {
    List<String> msgs = new ArrayList<String>();

    // cpf
    if (!UtilSistemas.isCPF(usuario.getCPF())) {
        usuario.setCPF("");
        msgs.add("CPF Inválido");
    } else if (!usuariosPesquisados.isEmpty()) {
        //usuario = usuarioDAO.getUsuarioByCPF(usuario.getCPF());
        this.somenteLeitura = true;
        //msgs.add("CPF Já Cadastrado");
    }
    //rg
    if (usuario.getRG().trim().length() < 5) {
        msgs.add("RG inválido");
    }

    // nome
    if (usuario.getNome().trim().length() < 3) {
        msgs.add("Nome inválido");
    }

    // data nasc
    if (usuario.getDataNasc() == null) {
        msgs.add("Data inválida");
    }

    // email
    if (senhaAux.equals("") && !usuario.getEmail().equals(this.confirmaEmail)) {
        msgs.add("Email inválido");
    }

    // email equivalente
    if (senhaAux.equals("") && !usuario.getEmail().equals(this.confirmaEmail)) {
        msgs.add("Email não são equivalentes");
    }

    //login
    String str = usuario.getUserName();
    int idx = str.indexOf(" ");   //- 1 verdadeiro não tem espaço
    Usuario user = usuarioDAO.getUsuarioByLogin(usuario.getUserName());
    if (idx != -1) {
        msgs.add("O nome de Usuário não deve conter espaços");
    }
    if (usuario.getUserName().length() < 3) {
        msgs.add("Usuário deve ter no minimo 3 digitos");
    }

// if(user.getUserName() != null){
// msgs.add(“Usuario ja esta cadastrado”);
// }
if (usuario.getUserName() == null) {
msgs.add(“Usuário Inválido”);
}

    // senha
    if (senhaAux.equals("") && !usuario.getSenha().equals(this.confirmaSenha)) {
        msgs.add("Senha inválida");
    }

    //                        
    if (!msgs.isEmpty()) {
        for (String s : msgs) {
            UtilSistemas.mostrarMensagemErro("Campo obrigatório", s);
        }
    }

    return (msgs.isEmpty());
}

public void pesquisar() {
    this.statusNovo = false;
    this.statusPesquisar = false;
    this.statusSalvar = false;
    this.statusCancelar = false;
    this.usuariosPesquisados = new ArrayList<Usuario>();
    if (!isNovo) {
        usuariosDe = usuarioDAO.listarUsuarios();
        usuariosPara = usuariosDe;
    }
}

/**
 * metodo salva usuario
 *
 * @throws Exception
 */
public void salvar() throws Exception {
    this.statusNovo = false;
    this.statusPesquisar = false;
    this.statusSalvar = true;
    this.statusCancelar = true;
    
    if (isCamposValidos()) {
        try {

            if (usuario.getSenha().equals("")) {
                usuario.setSenha(senhaAux);
                confirmaSenha = senhaAux;
            }
            usuario = usuarioDAO.salvar(usuario);

            if (usuario.getSeq() > 0 && permissoes.size() > 0) {
                permissaoDAO.salvarPermissoes(permissoes, usuario.getSeq(), isNovo);
            }
            if (isNovo) {
                usuariosDe = usuarioDAO.listarUsuarios();
                usuariosPara = usuariosDe;
                RequestContext.getCurrentInstance().execute("PF('dialogPerfil').show()");

            }
            isNovo = false;
            UtilSistemas.mostrarMensagemSucesso("Sucesso", "Usuario Salvo");
        } catch (Exception e) {
            UtilSistemas.mostrarMensagemErro("Erro", e.getMessage());
        }
    }
}

/**
 * Metodo que copia o perfil de permissões
 */
public void copiarPerfil() {
    isNovo = true;
    List<Permissao> permissoesAux = new ArrayList<Permissao>();
    permissoesAux = permissaoDAO.listarPermissao(usuarioPara);

    for (Permissao p : permissoesAux) {
        deletarPermissao(p.getId());
    }

    permissoes = permissaoDAO.listarPermissao(usuarioDe);

    permissaoDAO.salvarPermissoes(permissoes, usuarioPara, isNovo);
    isNovo = false;

}

public void cancelar() {
    this.statusNovo = false;
    this.statusSalvar = true;
    this.statusPesquisar = false;
    this.statusCancelar = true;
    this.usuariosPesquisados = new ArrayList<Usuario>();
    isNovo = false;

}

/**
 * limpa tela
 */
public void novo() {

    this.usuario = new Usuario();
    this.confirmaEmail = "";
    this.confirmaSenha = "";
    this.usuariosPesquisados = new ArrayList<Usuario>();

 
   this.usuario.setDepartamentoProjetos(new DepartamentoProjetos());
   
    permissoes = new ArrayList<Permissao>();

    this.isNovo = true;

    this.statusNovo = true;
    this.statusSalvar = false;
    this.statusPesquisar = true;
    this.statusCancelar = false;
    this.somenteLeitura = false;
    
  
}

/**
 * metodos retorna lista de usuario pesquisados
 *
 * @param pesquisa
 * @param usuario
 */
public void listarUsuarios() {
    usuariosPesquisados = usuarioDAO.getUsuarioByPesquisa(pesquisa, usuarioPesquisa);

}

/**
 * Metodo pra deletar permissão
 *
 * @param idPermissao
 */
public void deletarPermissao(int idPermissao) {
    permissaoDAO.deletarPermissao(idPermissao);
    listarPermissoes(usuario.getSeq());
    //RequestContext.getCurrentInstance().update("formCadastro:dtPermissoes");
}

/**
 * Metodo que retorna usuario pelo CPF
 *
 * @param CPF
 */
public void getUsuarioByCPF(String CPF) {
    usuario = usuarioDAO.getUsuarioByCPF(CPF);
}

/**
 * Metodo que lista empresas
 */
public void listarEmpresas() {
    empresas = empresaDAO.listarEmpresas();
}

/**
 * Metodo que retorna uma lista de programas ativos
 */
public void listarProgramas() {
    programas = programaDAO.listarProgramas();
}

/**
 * Metodo que lista programas pelo id do Sistema
 *
 * @param idSistema
 */
public void listarProgramasSistema(int idSistema) {
    programas = new ArrayList<Programa>();
    sistemas = new ArrayList<Sistema>();
    conteudoPesquisa = "";
    programas = programaDAO.listarProgramasByIdSistema(idSistema);
    int i = 0;
    for (Permissao p : permissoes) {

        for (i = 0; i < programas.size(); i++) {
            if (p.getPrograma().getIdPrograma() == programas.get(i).getIdPrograma()) {
                programas.remove(i);
            }
        }

    }

    if (programas.size() < 1) {
        RequestContext.getCurrentInstance().update("formCadastro:dlgSistema");
        UtilSistemas.mostrarMensagemAlerta("Atenção", "Todas as permissões deste sistemas já foram concedida ao usuário.");
        RequestContext.getCurrentInstance().execute("PF('dlgSistema').show();");
    } else {
        RequestContext.getCurrentInstance().execute("PF('dlgSistema').hide();");
        RequestContext.getCurrentInstance().update("formCadastro:dlgProgramas");
        RequestContext.getCurrentInstance().update("formCadastro:dlgSistema");
        RequestContext.getCurrentInstance().execute("PF('dlgProgramas').show();");
    }

}

/**
 * Metodo que adiciona uma nova permissao para usuario
 */
public void adicionarPermissao() {
    List<Programa> programasTemp = new ArrayList<Programa>();

    for (Programa p : programas) {
        if (p.isIsSelected()) {
            programasTemp.add(p);
        }
    }

    for (Programa p : programasTemp) {

        Permissao permissao = new Permissao();
        permissao.setIdUsuario(usuario.getSeq());
        permissao.setIsAcessa(true);
        permissao.setIsAltera(true);
        permissao.setIsInsere(true);
        permissao.setPrograma(p);
        permissao.setiUsuario(UtilSistemas.getUsuarioLogado().getSeq());

        permissoes.add(permissao);

    }

    permissaoDAO.salvarPermissoes(permissoes, usuario.getSeq(), isNovo);
    listarPermissoes(usuario.getSeq());

    RequestContext.getCurrentInstance().execute("PF('dlgProgramas').hide();");
    RequestContext.getCurrentInstance().update("formCadastro:pnlPermissao");

    UtilSistemas.mostrarMensagemSucesso("Sucesso!", "Permissão adicionada com sucesso!");

}

/**
 * Metodo que retorna uma lista de Centro de Custo
 */
public void listarCentroCusto() {
    centrosCusto = centroCustoDAO.listarCentroCusto();
}

public Usuario getUsuario() {
    return usuario;
}

public void setUsuario(Usuario usuario) {
    this.usuario = usuario;
    this.confirmaEmail = usuario.getEmail();
    this.confirmaSenha = usuario.getSenha();
    this.verificaSenha = usuario.getSenha();
    this.senhaAux = usuario.getSenha();
    this.usuarioPesquisa = "";

    if (usuario.getDepartamentoProjetos() == null) {
        usuario.setDepartamentoProjetos(new DepartamentoProjetos());
    }

    listarPermissoes(usuario.getSeq());
    pesquisar();
}

public List<Permissao> getPermissoes() {
    return permissoes;
}

public void setPermissoes(List<Permissao> permissoes) {
    this.permissoes = permissoes;
}

public List<Programa> getProgramas() {
    return programas;
}

public void setProgramas(List<Programa> programas) {
    this.programas = programas;
}

public List<Empresa> getEmpresas() {
    return empresas;
}

public void setEmpresas(List<Empresa> empresas) {
    this.empresas = empresas;
}

public List<CentroCusto> getCentrosCusto() {
    return centrosCusto;
}

public void setCentrosCusto(List<CentroCusto> centrosCusto) {
    this.centrosCusto = centrosCusto;
}

public int getPesquisa() {
    return pesquisa;
}

public void setPesquisa(int pesquisa) {
    this.pesquisa = pesquisa;
}

public String getUsuarioPesquisa() {
    return usuarioPesquisa;
}

public void setUsuarioPesquisa(String usuarioPesquisa) {
    this.usuarioPesquisa = usuarioPesquisa;
}

public List<Usuario> getUsuariosPesquisados() {
    return usuariosPesquisados;
}

public void setUsuariosPesquisados(List<Usuario> usuariosPesquisados) {
    this.usuariosPesquisados = usuariosPesquisados;
}

public String getVerificaSenha() {
    return verificaSenha;
}

public void setVerificaSenha(String verificaSenha) {
    this.verificaSenha = verificaSenha;
}

public boolean isSomenteLeitura() {
    return somenteLeitura;
}

public void setSomenteLeitura(boolean somenteLeitura) {
    this.somenteLeitura = somenteLeitura;
}

public boolean isPodeSalvar() {
    return podeSalvar;
}

public void setPodeSalvar(boolean podeSalvar) {
    this.podeSalvar = podeSalvar;
}

public String getConfirmaEmail() {
    return confirmaEmail;
}

public void setConfirmaEmail(String confirmaEmail) {
    this.confirmaEmail = confirmaEmail;
}

public String getConfirmaSenha() {
    return confirmaSenha;
}

public void setConfirmaSenha(String confirmaSenha) {
    this.confirmaSenha = confirmaSenha;
}

public boolean isStatusNovo() {
    return statusNovo;
}

public void setStatusNovo(boolean statusNovo) {
    this.statusNovo = statusNovo;
}

public boolean isStatusSalvar() {
    return statusSalvar;
}

public void setStatusSalvar(boolean statusSalvar) {
    this.statusSalvar = statusSalvar;
}

public boolean isStatusPesquisar() {
    return statusPesquisar;
}

public void setStatusPesquisar(boolean statusPesquisar) {
    this.statusPesquisar = statusPesquisar;
}

public boolean isStatusCancelar() {
    return statusCancelar;
}

public void setStatusCancelar(boolean statusCancelar) {
    this.statusCancelar = statusCancelar;
}

public List<Usuario> getUsuariosDe() {
    return usuariosDe;
}

public void setUsuariosDe(List<Usuario> usuariosDe) {
    this.usuariosDe = usuariosDe;
}

public List<Usuario> getUsuariosPara() {
    return usuariosPara;
}

public void setUsuariosPara(List<Usuario> usuariosPara) {
    this.usuariosPara = usuariosPara;
}

public int getUsuarioDe() {
    return usuarioDe;
}

public void setUsuarioDe(int usuarioDe) {
    this.usuarioDe = usuarioDe;
}

public int getUsuarioPara() {
    return usuarioPara;
}

public void setUsuarioPara(int usuarioPara) {
    this.usuarioPara = usuarioPara;
}

public List<Sistema> getSistemas() {
    return sistemas;
}

public void setSistemas(List<Sistema> sistemas) {
    this.sistemas = sistemas;
}

public String getConteudoPesquisa() {
    return conteudoPesquisa;
}

public void setConteudoPesquisa(String conteudoPesquisa) {
    this.conteudoPesquisa = conteudoPesquisa;
}

public boolean isShowDialog() {
    return showDialog;
}

public void setShowDialog(boolean showDialog) {
    this.showDialog = showDialog;
}

public List<DepartamentoProjetos> getDpProjetos() {
    return dpProjetos;
}

public void setDpProjetos(List<DepartamentoProjetos> dpProjetos) {
    this.dpProjetos = dpProjetos;
}

Você tentou ve se isso acontece no retorno da querry ou se acontece no seu back-end java, se for na querry basta add um DISTINCT na consulta, mas o ideal e verificar porque da duplicação.

Cara deu uma consultada aqui na query não aconteceu nada, então e no back end mesmo, mais ainda não consegui identificar na onde.

faz tempo que eu nao mexo fom jsf mas pode ser por conta do scope do seu bem, ja tentou limpar o entity manager antes de listar?
esvazie a lista que voce coloca na tela antes de colocar os novos dados, list.clear()

Valeu deu certo @Fabioreis1415. Obrigado!!!

marque como resolvido.

1 curtida