Хранение дат в Oracle через Hibernate - PullRequest
0 голосов
/ 26 декабря 2008

Я храню простой файл java.util.date в базе данных Oracle XE через hibernate.

При тестировании с JUnit, если я могу получить правильное значение, я получаю ошибку, подобную этой:

junit.framework.AssertionFailedError: 
  expected:<Sun Dec 28 11:20:27 CET 2008> 
  but was:<2008-12-28 11:20:27.0>

Значение хранится в столбце «Дата Oracle» (который должен иметь точность с точностью до секунды), что мне кажется вполне приемлемым. Кроме того, я удивлен, что 11:20:27 не равно 11: 20: 27.0. Или это связано с часовыми поясами?

Любая помощь приветствуется.

Торстен

Ответы [ 2 ]

1 голос
/ 26 декабря 2008

Хорошо, работал над этим еще ...

  1. В столбцах даты Oracle хранятся только значения с точностью до секунды.
  2. Даты Java содержат миллисекунды, но обычно они не печатаются. Итак

    ожидается

фактически был создан к дате, подобной 11: 20: 27,345, что, конечно, не равно 11: 20: 27.0

Решение:

  • либо использовать только полные секунды для хранения и извлечения или
  • получите hibernate для создания правильного типа данных Oracle (TIMESTAMP) - это очень зависит от диалекта, указанного в конфигурации hibernate (OracleDialect и Oracle10gDialect создают разные типы).
0 голосов
/ 26 декабря 2008

Если вы сравните java.util.Date с java.sql.Date, которые оба представляют один и тот же момент времени, equals(Object) вернет false (он считает, что два объекта разных классов никогда не будут равны).

Ваши тесты должны учитывать это. Самый простой способ сделать это - преобразовать даты во время UNIX (например, java.util.Date.getTime()) и сравнить эти значения.

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