sql >> Database teknologi >  >> RDS >> Mysql

Sådan søger du i datofeltet for en streng ved hjælp af JPA Criteria API

Ok, efter masser af eksperimenter med forskellige strategier, her er hvad jeg gjorde, der endelig virkede.

Jeg så dette indlæg her og pludselig huskede JPA Tuple Interface, som er et objekt, der kan returnere flere resultattype(r). Så for at udføre mit like sammenligning, og da Dato ikke bare kan castes til en streng, er her trinene;

  1. Jeg får kolonnen som en Tuple
  2. tjek The Tuple Object for at se, om det kan tildeles fra Dato
  3. hvis det er, så hent Dato-Format-udtrykket og send det til like udtryk.

Så i det væsentlige, her er hvad jeg oprindeligt havde, som tilsyneladende fejlede;

predicates.add(cb.like(cb.lower(entity.get("dateJoined").as(String.class)), "%"+search.toLowerCase()+"%")); 

Nu er det her, jeg har, der fungerer smukt;

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()+"%"));
}

BEMÆRKSE-VÆRDIGE OVERVEJELSER -

  1. Jeg er klar over, at uanset hvor søgningen vil blive påbegyndt, er alle mine datoer præsenteret i denne form 07/10/2015 10:25:09 PM deraf min evne til at vide, hvordan man formaterer datoen for sammenligningen i min like udtryk som "'%d/%m/%Y %r'" .
  2. Dette er kun et trin, der fungerer for Dates. De fleste andre typer, f.eks. int, long, char ... osv... kan alle castes direkte til streng, og efterhånden som jeg udforsker flere typer data, vil jeg helt sikkert gøre det samme for enhver anden type, der ikke kan castes direkte til streng .

Selvom dette fungerer perfekt for mig, men før jeg markerer dette som det rigtige svar, vil jeg udsætte det for nogle mere omfattende tests og i processen holde det åbent for kommentarer fra alle, der har nogen forbehold over for min strategi.

Og til sidst, til den ene person, at dette hjalp på nogen måde... Skål!



  1. mysql_fetch_array() returnerer 'det leverede argument er ikke en gyldig MySQL-resultatressource'

  2. Vælg / Indsæt version af en Upsert:er der et designmønster for høj samtidighed?

  3. Fejl under forsøg på at installere app med mysql2 gem

  4. 12c DBA_USERS Ændringer