Ok, nach vielem Experimentieren mit verschiedenen Strategien habe ich Folgendes getan, das endlich funktioniert hat.
Ich habe diesen Beitrag gesehen hier
und erinnerte sich plötzlich an das JPA Tuple
Schnittstelle, die ein Objekt ist, das mehrere Ergebnistypen zurückgeben kann. Also um mein like
auszuführen Vergleich, und da Date nicht einfach in einen String umgewandelt werden kann, sind hier die Schritte;
- Ich bekomme die Spalte als
Tuple
- überprüfen Sie das Tuple-Objekt, um zu sehen, ob es von Date zuweisbar ist
- Wenn ja, dann hole den Date-Format-Ausdruck und übergebe ihn an
like
Ausdruck.
Also im Wesentlichen, hier ist, was ich ursprünglich hatte, was anscheinend fehlschlug;
predicates.add(cb.like(cb.lower(entity.get("dateJoined").as(String.class)), "%"+search.toLowerCase()+"%"));
Nun, das ist, was ich habe, das wunderbar funktioniert;
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()+"%"));
}
BEMERKENSWERTE ÜBERLEGUNGEN -
- Mir ist bekannt, dass von wo auch immer die Suche gestartet wird, alle meine Daten in dieser Form
07/10/2015 10:25:09 PM
angezeigt werden daher meine Fähigkeit zu wissen, wie man das Datum für den Vergleich in meinemlike
formatiert Ausdruck als"'%d/%m/%Y %r'"
. - Dies ist nur ein Schritt, der für Dates funktioniert. Die meisten anderen Typen, z. B. int, long, char ... etc ... können alle direkt in String umgewandelt werden, und wenn ich mehr Datentypen untersuche, werde ich definitiv dasselbe für jeden anderen Typ tun, der nicht direkt in String umgewandelt werden kann .
Obwohl dies für mich perfekt funktioniert, aber bevor ich dies als die richtige Antwort markiere, werde ich es einigen ausführlicheren Tests unterziehen und es dabei für Kommentare von allen offen halten, die irgendwelche Vorbehalte gegen meine Strategie haben. P>
Und zu guter Letzt an diese eine Person, der das in irgendeiner Weise geholfen hat... Prost!