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

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"/>

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;

1 curtida

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?

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

Muito Obrigado pela ajuda! @raphaeloneves