Mysql
 sql >> база данни >  >> RDS >> Mysql

Как да търсите в поле за дата за низ с помощта на API за критерии за JPA

Добре, след много експерименти с различни стратегии, ето какво направих, което най-накрая проработи.

Видях тази публикация тук и изведнъж си спомни JPA Tuple Интерфейс, който е обект, който може да връща множество типове резултати. Така че да изпълня моя like сравнение и тъй като Date не може да бъде просто прехвърлен към низ, ето стъпките;

  1. Получавам колоната като Tuple
  2. направете проверка на обекта Tuple, за да видите дали може да се присвои от дата
  3. ако е, тогава вземете израза Date-Format и го предайте на like израз.

Така че по същество, ето какво имах първоначално, което очевидно се проваляше;

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

Ето какво имам, което работи прекрасно;

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

СЪОБРАЖЕНИЯ, ВЪЗНАЧИТЕЛНИ -

  1. Знам, че откъдето и да започне търсенето, всичките ми дати са представени в този формуляр 07/10/2015 10:25:09 PM оттук и способността ми да знам как да форматирам датата за сравнение в моя like израз като "'%d/%m/%Y %r'" .
  2. Това е само една стъпка, която работи за Dates. Повечето други типове, например int, long, char ... и т.н.... всички могат да бъдат директно прехвърляни към низ и докато изследвам повече типове данни, определено ще направя същото за всеки друг тип, който не може да бъде директно прехвърлен към низ .

Въпреки че това работи перфектно за мен, но преди да отбележа това като правилния отговор, ще го подложа на някои по-обстойни тестове и в процеса ще го оставя отворен за коментари от всеки, който има някакви резерви относно моята стратегия.

И накрая, на този човек, че това помогна по някакъв начин... Наздраве!



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как да подобрим производителността на INSERT в много голяма MySQL таблица

  2. Защо този цикъл не показва актуализиран брой обекти на всеки пет секунди?

  3. ГРЕШКА 1148:Използваната команда не е разрешена с тази версия на MySQL

  4. Каква е разликата между MySQL и MySQL2 предвид NodeJS

  5. Как да съхранявате датата в базата данни на MySQL?