Oké, na veel experimenteren met verschillende strategieën, is dit wat ik deed dat uiteindelijk werkte.
Ik zag dit bericht hier
en herinnerde zich plotseling de JPA Tuple
Interface die een object is dat meerdere resultaattype(s) kan retourneren. Dus om mijn like
. uit te voeren vergelijking, en aangezien Datum niet eenvoudig naar een String kan worden gegoten, volgen hier de stappen;
- Ik krijg de kolom als een
Tuple
- controleer het Tuple-object om te zien of het kan worden toegewezen vanaf Datum
- als dat zo is, pak dan de Date-Format-expressie en geef deze door aan de
like
uitdrukking.
Dus in wezen, dit is wat ik aanvankelijk had, wat blijkbaar niet werkte;
predicates.add(cb.like(cb.lower(entity.get("dateJoined").as(String.class)), "%"+search.toLowerCase()+"%"));
Dit is wat ik heb dat prachtig werkt;
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()+"%"));
}
OPMERKELIJKE OVERWEGINGEN -
- Ik ben me ervan bewust dat waar de zoekopdracht ook zou worden gestart, al mijn datums in deze vorm worden weergegeven
07/10/2015 10:25:09 PM
vandaar mijn vermogen om te weten hoe ik de datum moet opmaken voor de vergelijking in mijnlike
uitdrukking als"'%d/%m/%Y %r'"
. - Dit is slechts één stap die werkt voor Dates. De meeste andere typen, zoals int, long, char ...etc... kunnen allemaal rechtstreeks naar string worden gegoten en naarmate ik meer soorten gegevens verken, zal ik zeker hetzelfde doen voor elk ander type dat niet rechtstreeks naar string kan worden gegoten .
Hoewel dit perfect werkt voor mij, maar voordat ik dit als het juiste antwoord markeer, ga ik het aan wat meer uitgebreide tests onderwerpen en in het proces houd ik het open voor commentaar door iedereen die bedenkingen heeft over mijn strategie.
En tot slot, aan die ene persoon dat dit op wat voor manier dan ook heeft geholpen... Proost!