Solucionado (ver solução)
Solucionado
(ver solução)
16
respostas

duvida com puxar valor do banco de dados

Estou com uma duvida, queria um metodo para verificação de cpf, mais com isso eu teria uma pesquisa dentro do meu banco de dados, e como fazer essa pesquisa?

    public void consultarCpf(FacesContext faces, UIComponent componente, Object objeto)
            throws ValidatorException {
        String valor = objeto.toString();
        if (valor == getCliente().getCpf()) {
            throw new ValidationException("CPF ja existe");
        }
    }

Fiz desse jeito, mas nao funcionou.Como faço uma pesquisa pra dentro do banco para verificar se esse cpf ja existe? abraços

16 respostas
solução!

Olá Alisson,

Você tem que fazer um select utilizando a sintaxe de consulta HQL por exemplo: select c from Cliente where c.cpf = :cpf

Seria mais ou menos assim a sintaxe, segue um link para você dar uma olhada:

https://docs.jboss.org/hibernate/entitymanager/3.5/reference/en/html/queryhql.html

Espero ter ajudado.

fiz assim e ainda esta me dando erro; no meu dao

public Cliente consultaCpf(Cliente cliente) {
        EntityManager em = new JPAUtil().geEntityManager();
        Query query = em.createNamedQuery("Cliente.consulta");
        query.setParameter("cpf", cliente.getCpf());
        Cliente singleResult = (Cliente) query.getSingleResult();
        em.close();
        return singleResult;
    }

no meu bean

    public void consultaCpf(FacesContext faces, UIComponent componente, Object objeto) throws ValidatorException {
        String valor = objeto.toString();
        Cliente cpf = new ClienteDAO().consultaCpf(cliente);
        if(valor.equals(cpf.getCpf())) {
            throw new ValidatorException(new FacesMessage("CPF já existe"));
        }
    }

Erro é esse

ADVERTÊNCIA: /pagina/cliente.xhtml @34,71 validator="#{clienteBean.consultaCpf}": javax.persistence.NoResultException: No entity found for query
javax.el.ELException: /pagina/cliente.xhtml @34,71 validator="#{clienteBean.consultaCpf}": javax.persistence.NoResultException: No entity found for query
    at com.sun.faces.facelets.el.TagMethodExpression.invoke(TagMethodExpression.java:111)
    at javax.faces.validator.MethodExpressionValidator.validate(MethodExpressionValidator.java:106)
    at javax.faces.component.UIInput.validateValue(UIInput.java:1164)
    at javax.faces.component.UIInput.validate(UIInput.java:982)
    at javax.faces.component.UIInput.executeValidate(UIInput.java:1248)
    at javax.faces.component.UIInput.processValidators(UIInput.java:712)
    at javax.faces.component.UIComponentBase.processValidators(UIComponentBase.java:1261)
    at javax.faces.component.UIComponentBase.processValidators(UIComponentBase.java:1261)
    at org.primefaces.component.fieldset.Fieldset.processValidators(Fieldset.java:208)
    at javax.faces.component.UIForm.processValidators(UIForm.java:253)
    at javax.faces.component.UIComponentBase.processValidators(UIComponentBase.java:1261)
    at javax.faces.component.UIComponentBase.processValidators(UIComponentBase.java:1261)
    at org.primefaces.component.layout.Layout.processValidators(Layout.java:247)
    at javax.faces.component.UIComponentBase.processValidators(UIComponentBase.java:1261)
    at javax.faces.component.UIComponentBase.processValidators(UIComponentBase.java:1261)
    at javax.faces.component.UIViewRoot.processValidators(UIViewRoot.java:1195)
    at com.sun.faces.lifecycle.ProcessValidationsPhase.execute(ProcessValidationsPhase.java:76)
    at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101)
    at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:198)
    at javax.faces.webapp.FacesServlet.service(FacesServlet.java:658)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:303)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
    at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:218)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:122)
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:505)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:169)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103)
    at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:956)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:442)
    at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1082)
    at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:623)
    at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:318)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
    at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
    at java.lang.Thread.run(Unknown Source)
Caused by: javax.persistence.NoResultException: No entity found for query
    at org.hibernate.ejb.QueryImpl.getSingleResult(QueryImpl.java:291)
    at br.com.bercalini.borracharia.DAO.ClienteDAO.consultaCpf(ClienteDAO.java:58)
    at br.com.bercalini.borracharia.bean.ClienteBean.consultaCpf(ClienteBean.java:92)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    at java.lang.reflect.Method.invoke(Unknown Source)
    at org.apache.el.parser.AstValue.invoke(AstValue.java:279)
    at org.apache.el.MethodExpressionImpl.invoke(MethodExpressionImpl.java:273)
    at com.sun.faces.facelets.el.TagMethodExpression.invoke(TagMethodExpression.java:105)
    ... 39 more

nov 12, 2016 4:14:18 PM com.sun.faces.context.AjaxExceptionHandlerImpl handlePartialResponseError
GRAVE: javax.persistence.NoResultException: No entity found for query
    at org.hibernate.ejb.QueryImpl.getSingleResult(QueryImpl.java:291)
    at br.com.bercalini.borracharia.DAO.ClienteDAO.consultaCpf(ClienteDAO.java:58)
    at br.com.bercalini.borracharia.bean.ClienteBean.consultaCpf(ClienteBean.java:92)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    at java.lang.reflect.Method.invoke(Unknown Source)
    at org.apache.el.parser.AstValue.invoke(AstValue.java:279)
    at org.apache.el.MethodExpressionImpl.invoke(MethodExpressionImpl.java:273)
    at com.sun.faces.facelets.el.TagMethodExpression.invoke(TagMethodExpression.java:105)
    at javax.faces.validator.MethodExpressionValidator.validate(MethodExpressionValidator.java:106)
    at javax.faces.component.UIInput.validateValue(UIInput.java:1164)
    at javax.faces.component.UIInput.validate(UIInput.java:982)
    at javax.faces.component.UIInput.executeValidate(UIInput.java:1248)
    at javax.faces.component.UIInput.processValidators(UIInput.java:712)
    at javax.faces.component.UIComponentBase.processValidators(UIComponentBase.java:1261)
    at javax.faces.component.UIComponentBase.processValidators(UIComponentBase.java:1261)
    at org.primefaces.component.fieldset.Fieldset.processValidators(Fieldset.java:208)
    at javax.faces.component.UIForm.processValidators(UIForm.java:253)
    at javax.faces.component.UIComponentBase.processValidators(UIComponentBase.java:1261)
    at javax.faces.component.UIComponentBase.processValidators(UIComponentBase.java:1261)
    at org.primefaces.component.layout.Layout.processValidators(Layout.java:247)
    at javax.faces.component.UIComponentBase.processValidators(UIComponentBase.java:1261)
    at javax.faces.component.UIComponentBase.processValidators(UIComponentBase.java:1261)
    at javax.faces.component.UIViewRoot.processValidators(UIViewRoot.java:1195)
    at com.sun.faces.lifecycle.ProcessValidationsPhase.execute(ProcessValidationsPhase.java:76)
    at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101)
    at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:198)
    at javax.faces.webapp.FacesServlet.service(FacesServlet.java:658)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:303)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
    at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:218)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:122)
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:505)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:169)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103)
    at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:956)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:442)
    at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1082)
    at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:623)
    at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:318)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
    at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
    at java.lang.Thread.run(Unknown Source)

ah e no meu modelo fiz assim

@NamedQueries({
    @NamedQuery(name = "Cliente.ListarTodos", query = "Select c from Cliente c"),
    @NamedQuery(name = "Cliente.consulta", query= "Select c from Cliente c where c.cpf = :cpf")
})

Alisson,

É que o cpf não existe no seu banco de dados e ele esta devolvendo uma exception:javax.persistence.NoResultException

Trata essa exception que vai dar certo e testa com um cpf que existe.

meu parceiro agora ta adicionando tudo oque digito la :(. a alteração que fiz foi no meu dao, fico assim.

public Cliente consultaCpf(Cliente cliente) {
        EntityManager em = new JPAUtil().geEntityManager();
        Query query = em.createNamedQuery("Cliente.consulta");
        try{
            query.setParameter("cpf", cliente.getCpf());
            Cliente singleResult = (Cliente) query.getSingleResult();
            return singleResult;
        }catch(NoResultException ex) {
            return cliente;
        }
    }

Olá Alisson,

Se esta adicionando não é por este select. Deu certo a consulta ?

Nao ainda nao deu certo Joao, eu fiz esse metodo no meu dao.

public Cliente consultaCpf(Cliente cliente) {
        EntityManager em = new JPAUtil().geEntityManager();
        Query query = em.createNamedQuery("Cliente.consulta");
        try{
            query.setParameter("cpf", cliente.getCpf());
            Cliente singleResult = (Cliente) query.getSingleResult();
            return singleResult;
        }catch(NoResultException ex) {
            return cliente;
        }
    }

E no meu bean fiz assim

    public void consultaCpf(FacesContext faces, UIComponent componente, Object objeto) throws ValidatorException {
        String valor = objeto.toString();
        Cliente cpf = new ClienteDAO().consultaCpf(cliente);
        if(valor.equals(cpf.getCpf())) {
            throw new ValidatorException(new FacesMessage("CPF já existe"));
        }
    }

no meu bean to puxando o meu metodo no dao, como você deve ter percebido, e no meu xhtml estou chamando o metodo do bean

    <p:inputMask id="cpf" value="#{clienteBean.cliente.cpf}" size="13"
                            required="true" requiredMessage="CPF obrigatório"
                            mask="999.999.999-99"  validator="#{clienteBean.consultaCpf}"/>

E agora adiciono um cpf ja existente no banco e adiciona mesmo assim, e até mesmo um cpf que nao existe

A variavel cliente nao foi declarada neste metodo.

public void consultaCpf(FacesContext faces, UIComponent componente, Object objeto) throws ValidatorException {
        String valor = objeto.toString();
        Cliente cpf = new ClienteDAO().consultaCpf(cliente);
        if(valor.equals(cpf.getCpf())) {
            throw new ValidatorException(new FacesMessage("CPF já existe"));
        }
    }

oi Joao nao entendi direito kkk.

A variavel cliente que você passa para o ClienteDAO.consultaCpf(cliente);

Passa toda a classe cliente ClienteDAO, para eu ver se tem algum problema.

Ah sim jõao então fiz a minha variavel que estou passando para no cpf(cliente); encima da pagina, ficando assim.

    private Cliente cliente;

e gettrs e setters. Acho que o problema deve estar no meu try catch.

Class Cliente

import java.io.Serializable;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
import javax.persistence.OneToOne;
import javax.persistence.Table;

@Entity
@Table(name = "cliente")
@NamedQueries({
    @NamedQuery(name = "Cliente.ListarTodos", query = "Select c from Cliente c"),
    @NamedQuery(name = "Cliente.consulta", query= "Select c from Cliente c where c.cpf = :cpf")
})
public class Cliente implements Serializable {

    private static final long serialVersionUID = 1L;

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    @Column(name = "codigo")
    private Long codigo;

    @Column(name = "nome", length = 50, nullable = false)
    private String nome;

    @Column(name = "cpf", length = 20, nullable = false)
    private String cpf;

    @Column(name = "telefone", length = 20)
    private String telefone;

    @Column(name = "celular", length = 20, nullable = false)
    private String celular;

    @Column(name = "observacao", length = 40)
    private String observacao;

    @OneToOne(fetch = FetchType.EAGER)
    @JoinColumn(name = "enderedo_codigo", referencedColumnName = "codigo")
    private Endereco endereco = new Endereco();

    public Long getCodigo() {
        return codigo;
    }

    public void setCodigo(Long codigo) {
        this.codigo = codigo;
    }

    public String getNome() {
        return nome;
    }

    public void setNome(String nome) {
        this.nome = nome;
    }

    public String getCpf() {
        return cpf;
    }

    public void setCpf(String cpf) {
        this.cpf = cpf;
    }

    public String getTelefone() {
        return telefone;
    }

    public void setTelefone(String telefone) {
        this.telefone = telefone;
    }

    public String getCelular() {
        return celular;
    }

    public void setCelular(String celular) {
        this.celular = celular;
    }

    public Endereco getEndereco() {
        return endereco;
    }

    public void setEndereco(Endereco endereco) {
        this.endereco = endereco;
    }

    public String getObservacao() {
        return observacao;
    }

    public void setObservacao(String observacao) {
        this.observacao = observacao;
    }
}

Classe ClienteDAO

import java.util.List;

import javax.persistence.EntityManager;
import javax.persistence.NoResultException;
import javax.persistence.Query;

import br.com.bercalini.borracharia.modelo.Cliente;
import br.com.bercalini.borracharia.modelo.Endereco;

public class ClienteDAO {

    public void cadastrar(Cliente cliente, Endereco endereco) {
        EntityManager em = new JPAUtil().geEntityManager();
        em.getTransaction().begin();
        em.persist(cliente);
        em.persist(endereco);
        em.getTransaction().commit();
        em.close();
    }

    public void remover(Cliente cliente) {
        EntityManager em = new JPAUtil().geEntityManager();
        em.getTransaction().begin();
        em.remove(em.merge(cliente));
        em.getTransaction().commit();
        em.close();
    }

    public void atualizar(Cliente cliente, Endereco endereco) {
        EntityManager em = new JPAUtil().geEntityManager();
        em.getTransaction().begin();
        em.merge(cliente);
        em.merge(endereco);
        em.getTransaction().commit();
        em.close();
    }

    public Cliente buscarPorId(Long codigo) {
        EntityManager em = new JPAUtil().geEntityManager();
        Cliente cliente = em.find(Cliente.class, codigo);
        em.close();
        return cliente;
    }

    @SuppressWarnings("unchecked")
    public List<Cliente> lstClientes() {
        EntityManager em = new JPAUtil().geEntityManager();
        List<Cliente> lista = em.createNamedQuery("Cliente.ListarTodos").getResultList();
        em.close();
        return lista;
    }

    public Cliente consultaCpf(Cliente cliente) {
        EntityManager em = new JPAUtil().geEntityManager();
        Query query = em.createNamedQuery("Cliente.consulta");
        try{
            query.setParameter("cpf", cliente.getCpf());
            Cliente singleResult = (Cliente) query.getSingleResult();
            return singleResult;
        }catch(NoResultException ex) {
            return cliente;
        }
    }

Classe ClienteBean

@ManagedBean
@SessionScoped
public class ClienteBean {

    private Cliente cliente;
    private Endereco endereco;
    private List<Cliente> clientes = new ClienteDAO().lstClientes();

    public Cliente getCliente() {
        if (cliente == null) {
            cliente = new Cliente();
        }
        return cliente;
    }

    public void setCliente(Cliente cliente) {
        this.cliente = cliente;
    }

    public Endereco getEndereco() {
        if (endereco == null) {
            endereco = new Endereco();
        }
        return endereco;
    }

    public void setEndereco(Endereco endereco) {
        this.endereco = endereco;
    }

    public void salvar() {
        if (cliente.getCodigo() == null) {
            cliente.setEndereco(this.endereco);
            new ClienteDAO().cadastrar(cliente, endereco);
            this.clientes = new ClienteDAO().lstClientes();
            new MensagemUtil().adicionarMensagemInfo("Cliente Cadastrado com sucesso");
        } else {
            new ClienteDAO().atualizar(cliente, endereco);
            new MensagemUtil().adicionarMensagemInfo("Cliente atualizado com sucesso");
        }
        this.cliente = new Cliente();
        this.endereco = new Endereco();
    }

    public List<Cliente> getClientes() {
        ClienteDAO dao = new ClienteDAO();
        if (clientes == null) {
            dao.lstClientes();
        }
        return clientes;
    }

    public void excluir(Cliente cliente) {
        new ClienteDAO().remover(cliente);
        new MensagemUtil().adicionarMensagemInfo("Excluido com sucesso");
        this.clientes = new ClienteDAO().lstClientes();
    }

    public Redirecao carregar(Cliente cliente) {
        this.cliente = cliente;
        this.endereco = cliente.getEndereco();
        return new Redirecao("cliente");
    }

    public Redirecao formularioCadastro() {
        return new Redirecao("cliente");
    }

    public Redirecao forumularioTabelaCliente() {
        return new Redirecao("pesquisaCliente");
    }

    public void consultaCpf(FacesContext faces, UIComponent componente, Object objeto) throws ValidatorException {
        String valor = objeto.toString();
        Cliente cpf = new ClienteDAO().consultaCpf(cliente);
        if(valor.equals(cpf.getCpf())) {
            throw new ValidatorException(new FacesMessage("CPF já existe"));
        }
    }

Na minha opinião este metodo deveria retornar null se o cliente não existe

 public Cliente consultaCpf(Cliente cliente) {
        EntityManager em = new JPAUtil().geEntityManager();
        Query query = em.createNamedQuery("Cliente.consulta");
        try{
            query.setParameter("cpf", cliente.getCpf());
            Cliente singleResult = (Cliente) query.getSingleResult();
            return singleResult;
        }catch(NoResultException ex) {
            return null;
        }
    }

E alteraria o método de consulta para:

 public void consultaCpf(FacesContext faces, UIComponent componente, Object objeto) throws ValidatorException {
        String valor = objeto.toString();
        Cliente cpf = new ClienteDAO().consultaCpf(cliente);
        if(cpf  != null) {
            throw new ValidatorException(new FacesMessage("CPF já existe"));
        }
    }

sim arrumei o meu retorn, tava como null, só fiz alguns teste e esqueci de voltar kkk, sabe oque andei notando? o meu metodo não ta fazendo a verificação do meu if.


System.out.println("Sera que caiu aqui?");
        String valor = objeto.toString();
        Cliente cpf = new ClienteDAO().verificaoCPF(cliente);
        if(valor.equals(cpf)) {
            throw new ValidatorException(new FacesMessage("CPF já Existe"));
        }
        System.out.println("Caiu fora");
    }

Ele não faz a verificação :(

Opa Alisson !

Será que é isso ? Vê se funciona pra gente fechar o tópico.

João muito obrigado, me ajudo muito, era o if mesmo, fiz de um outro modo que agora rodou certinho verificando o cpf. muito obrigado por me responder me ajudou muito. abraços!

Por nada !!

Um abraço !