Ok, dopo molti esperimenti con varie strategie, ecco cosa ho fatto che alla fine ha funzionato.
Ho visto questo post qui
e improvvisamente ha ricordato la JPA Tuple
Interfaccia che è un oggetto che può restituire più tipi di risultati. Quindi per eseguire il mio like
confronto, e poiché Date non può essere semplicemente convertito in una stringa, ecco i passaggi;
- Ottengo la colonna come
Tuple
- esegui un controllo su The Tuple Object per vedere se è assegnabile da Date
- se lo è, prendi l'espressione Date-Format e passala a
like
espressione.
Quindi, in sostanza, ecco cosa avevo inizialmente che apparentemente stava fallendo;
predicates.add(cb.like(cb.lower(entity.get("dateJoined").as(String.class)), "%"+search.toLowerCase()+"%"));
Ora, questo è quello che ho che funziona magnificamente;
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()+"%"));
}
CONSIDERAZIONI VALUTE -
- Sono consapevole del fatto che da qualsiasi luogo venga avviata la ricerca, tutte le mie Date vengono presentate in questo modulo
07/10/2015 10:25:09 PM
da qui la mia capacità di sapere come formattare la Data per il confronto nel miolike
espressione come"'%d/%m/%Y %r'"
. - Questo è solo un passaggio che funziona per Date. La maggior parte degli altri tipi, ad esempio int, long, char ... ecc... possono essere tutti trasmessi direttamente a String e mentre esploro più tipi di dati, farò sicuramente lo stesso per qualsiasi altro tipo che non può essere trasmesso direttamente a String .
Anche se questo funziona perfettamente per me, ma prima di contrassegnarlo come la risposta giusta, lo sottoporrò ad alcuni test più approfonditi e nel processo lo terrò aperto per i commenti di chiunque abbia qualche riserva sulla mia strategia.
E infine, a quella persona a cui questo ha aiutato in qualche modo... Saluti!