sql >> Databáze >  >> RDS >> Mysql

Jak vyhledat pole data pro řetězec pomocí JPA Criteria API

Dobře, po spoustě experimentování s různými strategiemi jsem udělal toto, co nakonec fungovalo.

Viděl jsem tento příspěvek zde a najednou si vzpomněl na JPA Tuple Rozhraní, což je objekt, který může vrátit více typů výsledků. Abych provedl můj like porovnání, a protože Datum nelze jednoduše přetypovat na řetězec, zde jsou kroky;

  1. Dostanu sloupec jako Tuple
  2. zkontrolujte objekt Tuple, abyste zjistili, zda je přiřaditelný z Date
  3. pokud ano, získejte výraz Date-Format a předejte jej like výraz.

Takže v podstatě zde je to, co jsem původně měl, což zjevně selhalo;

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

Teď mám tohle, co krásně funguje;

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

POZNÁMKY HODNÉ -

  1. Jsem si vědom toho, že kdekoli by bylo vyhledávání zahájeno, všechna moje data jsou uvedena v tomto tvaru 07/10/2015 10:25:09 PM odtud moje schopnost vědět, jak formátovat Datum pro porovnání v mém like výraz jako "'%d/%m/%Y %r'" .
  2. Toto je jen jeden krok, který pro Dates funguje. Většinu ostatních typů, např. int, long, char ...atd... lze všechny přenést přímo do řetězce a jak prozkoumávám další typy dat, určitě udělám totéž pro jakýkoli jiný typ, který nelze přímo přenést do řetězce .

I když to pro mě funguje perfektně, ale než to označím za správnou odpověď, podrobím to rozsáhlejším testům a nechám to otevřené pro komentáře každého, kdo má nějaké výhrady k mé strategii.

A nakonec jedné osobě, které to jakkoli pomohlo... Na zdraví!



  1. Vytvoření webové aplikace od nuly pomocí Python Flask a MySQL:Část 5

  2. Formátování čísel pomocí čárek v MariaDB

  3. Otázka PHP:Jak opravit tyto příkazy if/elseif

  4. PHP SQL:Jak ukládat data do více databází z jednoho html formuláře NEBO jak automaticky kopírovat data z jedné databáze do jiné databáze