Não consigo criar um método de pesquisa de datas =/

3 respostas Resolvido
jsfprimefacesjava
Erick_Oliveira

Bom dia(tarde, noite) pessoal.

Eu estou criando um sistema para a clínica do meu irmão e estou com uma dúvida que pode ser besta para alguns kkk mas como estou começando na área de programação estou me complicando um pouco.

Eu não consigo de maneira alguma criar um método de pesquisa de datas que funcione.

Já consegui cadastrar a data e os outros atributos também. Já consegui listar todos os atributos e também pesquisar todos os atributos tranquilamente, menos a data.

Se alguém puder me ajudar por favor!

Desde Já agradeço.

No meu código está assim:

Cliente.java

Calendar dtNascimento; ...gets e sets

ClienteDAOImpl

public List<Cliente> buscaNascimento(Calendar dtNascimento) {
return em.createQuery("from Cliente c where "
        + "c.dtNascimento like :param", Cliente.class)
        .setParameter("param", dtNascimento)
        .getResultList();

}

ClienteDAO

public List<Cliente> buscaNascimento(Calendar dtNascimento);

ClienteBean

public void buscarDtNascimento(){
	FacesMessage msg;
	List<Cliente> encontrados = cliDao.buscaNascimento(cli.getDtNascimento());
	if(encontrados != null){
		for(@SuppressWarnings("unused") Cliente c : encontrados){
			
		}
		lista = encontrados;
		msg =  new FacesMessage("Dados Encontrados");
	}else{
		msg =  new FacesMessage("Dados Incorretos");
	}
	FacesContext.getCurrentInstance().addMessage(null, msg);
}

Página XHTML (Primefaces)

<p:outputLabel id="dtNascimento" value="Data de Nascimento" />
            <p:calendar for="dtNascimento" mask="99/99/9999" pattern="dd/MM/yyyy" value="#{clienteBean.cli.dtNascimento.time}"/>
            <p:commandButton icon="ui-icon-search" action="#{clienteBean.buscarDtNascimento}" update="lista"/>

3 Respostas

raphaeloneves
Solucao aceita

Primeiro ponto, o like é utilizado para compração de String, logo, não funciona muito bem com datas.
Segundo, como está mapeado o atributo dtNascimento na sua classe Cliente? Certifique-se de usar o @Temporal(TemporalType.XXX) neste atributo para o JPA não se perder.

Por fim, use a jpql a seguir:

SELECT c FROM Cliente c WHERE c.dtNascimento = :param;
ou simplesmente
FROM Cliente c WHERE c.dtNascimento = :param;

Erick_Oliveira

Obrigado pela resposta, não sabia dessa @Temporal, vou modificar o select e colocar esse mapeamento e ver se dá certo.

Só uma duvida amigo, se já houver clientes cadastrados, quando eu fizer a modificação (se funcionar) eu vou ter que refazer o banco de dados e recadastrar os que já foram cadastrados?

Erick_Oliveira

Cara fiz oq vc falou e deu td certo e não tive que refazer o banco.

Muito Obrigado pela ajuda! @raphaeloneves

Criado 28 de setembro de 2017
Ultima resposta 28 de set. de 2017
Respostas 3
Participantes 2