Hibernate связывает временную дату как метку времени с собственными запросами - PullRequest
0 голосов
/ 27 апреля 2020

Я обновляю Hibernate в приложении с версии 3.x до последней версии (5.4.14 на данный момент) и прорабатываю все изменения. Похоже, было изменение в том, как TemporalType.DATE используется по отношению к собственным запросам. Для меня изменение похоже на ошибку, но, вероятно, есть разумное объяснение. В качестве очень простого варианта использования рассмотрим следующий запрос:

    final Query query1 = entityManager.createNativeQuery("select :date");
    query1.setParameter("date", new Date(), TemporalType.DATE);
    query1.getSingleResult();

Это обычная настройка в этом приложении, и ожидаемое поведение состоит в том, что данная Дата будет рассматриваться как дата в базе данных. Обычно используется в запросах диапазона к столбцам даты. Тем не менее, это больше не работает в ребрах из-за части временной отметки Date , используемой в запросе. Когда я включаю трассировку Hibernate, я вижу следующее:

[BasicBinder # bind (64)] параметр привязки [1] как [TIMESTAMP] - [Пн 27 апреля 11:15:30 CEST 2020]

Для сравнения я выполнил следующий запрос:

    final Query query2 = entityManager.createNativeQuery("select :date");
    query2.setParameter("date", LocalDate.now());
    query2.getSingleResult();

со следующей трассировкой:

[BasicBinder # bind (64)] параметр привязки [1] как [ДАТА] - [2020-04-27]

Очевидно, что два подхода рассматриваются по-разному. Для меня они должны быть эквивалентны. Когда я вхожу в код Hibernate для вызова setParameter , принимающего TemporalType.DATE , я вижу, что Hibernate просто игнорирует мой TemporalType.DATE .

Это для собственных запросов, действительно работает, как я ожидаю, для не собственных запросов при использовании setParameter и TemporalType.DATE .

Это ожидаемое поведение?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...