Собственные форматы даты запросов между различными механизмами баз данных - PullRequest
0 голосов
/ 20 мая 2019

Я создаю собственный запрос для Hibernate, используя следующий код

    final Query countQuery = entityManager.createNativeQuery( countSql );

    if ( countCriteria.getStartDate() != null ) {
        final String startDate = countCriteria.getStartDate().toString();
        countQuery.setParameter( START_DATE_PARAMETER, startDate );
    }

Где startDate в моем классе - org.joda.time.DateTime, а toString() возвращает "2019-05-13".

Эти параметры запроса отлично работают в производственной среде, работающей на MS Sql Server.(ick!)

Теперь модульный тест запущен для HSQLDB.Я предоставляю те же значения, и он выдает:

javax.persistence.PersistenceException: org.hibernate.exception.DataException: data exception: invalid datetime format

Когда он пытается выполнить запрос.

Поскольку параметр отформатирован точно так же, я предполагаю, что проблемаформат строки даты для HSQLDB.

Итак, что теперь?Как мне двигаться вперед с этим?Я проверил формат setParameter, который принимает TEMPORAL или что-то еще, но это не сработает в течение времени JODA.

Я уже говорил с моим техническим руководителем о том, что не нужно использовать собственные запросы, а использовать запросы гибернации, ноэто упало на слух.У меня есть другой вариант, чтобы мне не пришлось сражаться с моим техническим лидером, чтобы написать модульные тесты для наших DAO?

1 Ответ

0 голосов
/ 21 мая 2019

Что ж, мне стыдно признаться, сколько времени мне понадобилось, чтобы понять это.

Я просто преобразовал LocalDate в дату java, а затем использовал ее для установки параметра TemporalType.

    Date date = localDate.toDate();
    countQuery.setParameter(parmName, date, TemporalType.DATE);

Кажется, это работает нормально.

...