Как настроить Criteria API для получения даты, равной формату «ГГГГ-ММ-ДД» - PullRequest
0 голосов
/ 24 апреля 2020

У меня есть таблица пользователей с полем «createDate» (тип отметки времени), где у меня есть данные в формате «2020-04-16 01:36:57». Я использую Spring с Criteria API и мне нужно отправить «2020- 04-16 'и получить эту строку.

Итак, Критерии получают эту строку' 2020-04-16 ', затем я анализирую ее в формате данных, поскольку Критерии требуют:

                SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
                java.util.Date date = null;
                try {
                   date =   formatter.parse(timeValue) ;
                } catch (ParseException e) {
                    e.printStackTrace();
                }

И используйте это:

return criteriaBuilder.equal(root.get(fieldName).as(Date.class), date);

Мой запрос ничего не возвращает, и в журнале я вижу: .... где приведено (user0_.user_create_date как datetime) = '16.04.2020 00: 00: 00.000 «Интересно, что этот запрос не работает, когда я запускаю его в MySQl окне запроса: (Код ошибки: 1525. Неверное значение DATETIME: '04 / 16/2020 00: 00: 00.000 ')

Когда я запускаю в MySQl окне запроса:

SELECT * from users 
where cast(user_create_date as date) = '2020-04-16'

, я получаю соответствующую строку. Итак, как мне настроить Критерии для отправки

.... where cast(user_create_date as date) = '2020-04-16'

Теперь, если я пытаюсь отправить:

return criteriaBuilder.equal(root.get(fieldName).as(Date.class), timeValue) 

Я получаю исключение

...