Ok, depois de muitas experiências com várias estratégias, aqui está o que eu fiz que finalmente funcionou.
Eu vi esta postagem aqui e de repente me lembrei do JPA
Tuple
Interface que é um objeto que pode retornar vários tipos de resultado. Então, para executar meu like
comparação, e como Date não pode ser simplesmente convertido em uma String, aqui estão as etapas; - Recebo a coluna como uma
Tuple
- verifique o objeto Tuple para ver se ele pode ser atribuído a partir de Data
- se for, obtenha a expressão Date-Format e passe-a para o
like
expressão.
Então, essencialmente, aqui está o que eu tinha inicialmente que aparentemente estava falhando;
predicates.add(cb.like(cb.lower(entity.get("dateJoined").as(String.class)), "%"+search.toLowerCase()+"%"));
Agora, isso é o que eu tenho que funciona lindamente;
Path<Tuple> tuple = entity.<Tuple>get("dateJoined");
if(tuple.getJavaType().isAssignableFrom(Date.class)){
Expression<String> dateStringExpr = cb.function("DATE_FORMAT", String.class, entity.get("dateJoined"), cb.literal("'%d/%m/%Y %r'"));
predicates.add(cb.like(cb.lower(dateStringExpr), "%"+search.toLowerCase()+"%"));
}
CONSIDERAÇÕES dignas de nota -
- Estou ciente de que, de onde quer que a pesquisa seja iniciada, todas as minhas datas são apresentadas neste formulário
07/10/2015 10:25:09 PM
daí minha capacidade de saber como formatar a data para a comparação no meulike
expressão como"'%d/%m/%Y %r'"
. - Esta é apenas uma etapa que funciona para Datas. A maioria dos outros tipos, por exemplo, int, long, char ... etc... podem ser todos convertidos diretamente em string e, à medida que exploro mais tipos de dados, definitivamente farei o mesmo para qualquer outro tipo que não possa ser convertido diretamente em string .
Embora isso funcione perfeitamente para mim, mas antes de marcar isso como a resposta correta, vou submetê-lo a alguns testes mais extensos e, no processo, mantê-lo aberto para comentários de qualquer pessoa que tenha alguma reserva sobre minha estratégia.
E finalmente, para aquela pessoa que isso ajudou de alguma forma... Saúde!