Тип Java для даты / времени при использовании Oracle Date с Hibernate - PullRequest
10 голосов
/ 03 февраля 2010

У нас есть столбец Дата Oracle. Сначала в нашем классе Java / Hibernate мы использовали java.sql.Date. Это сработало, но, похоже, при хранении мы не сохранили информацию о времени в базе данных, поэтому я изменил тип данных Java на Timestamp. Теперь мы получаем эту ошибку:

springframework.beans.factory.BeanCreationException: Ошибка создания бина с именем «org.springframework.dao.an notation.PersistenceExceptionTranslationPostProcessor # 0' определено в ресурсе пути к классу [Маржа-сервис-домен -config.xml]: инициализация компонента не удалась; вложенное исключение org.springframework.beans.factory.BeanCreatio nException: ошибка создания бина с имя 'sessionFactory' определено в классе ресурс пути [m-service-doma in-config.xml]: вызов init метод не удался; вложенное исключение org.hibernate.HibernateException: Неправильный тип столбца: CREATE_TS, ожидается: отметка времени

Любые идеи о том, как отобразить Oracle Date, сохраняя при этом часть времени?


Обновление: я могу заставить его работать, если я использую тип данных Oracle Timestamp, но я не хочу этот уровень точности в идеале. Просто хочу базовый Oracle Date.

Ответы [ 6 ]

8 голосов
/ 03 февраля 2010

Я всегда использую java.util.Date с датами Oracle, и он прекрасно обрабатывает дату и время.

7 голосов
/ 03 февраля 2010

Не прямой ответ, но я бы использовал тип Oracle TIMESTAMP:

  • TIMESTAMP (дробная_секундная точность) Год, месяц и день даты, а также часов, минут и вторые значения времени, где fractional_seconds_precision опционально указывает количество цифры в дробной части SECOND поле даты и времени и может быть число в диапазоне от 0 до 9. по умолчанию 6. Например, вы указываете TIMESTAMP как литерал, следующий:

    TIMESTAMP'1997-01-31 09:26:50.124'
    

с желаемым fractional_second_precision.

2 голосов
/ 03 февраля 2010

Может быть, у вас эта проблема? Убедитесь, что у вас установлена ​​последняя версия драйвера JDBC, имя файла должно быть ojdbc5.jar.

1 голос
/ 03 февраля 2010

Прежде всего - вы правы, что вам нужно использовать класс java.sql.Timestamp, поскольку класс java.sql.Date явно не представляет конкретное время дня (скорее, он пытается представить полночь GMT).

Что касается вашей ошибки - вы не предоставили достаточно информации, чтобы сделать что-то большее, чем догадаться (для определения причины потребовалось бы изучить как конфигурацию Hibernate, так и класс). Однако , если вы просто изменили класс поля в классе Java, то, конечно, вам также придется обновить отображение Hibernate. Если вы не сделали последнего, то это, вероятно, приведет к вашему несоответствию. Попробуйте явно указать type="timestamp" для соответствующего отображения.

РЕДАКТИРОВАТЬ: Если вы используете аннотации, то обновили ли вы аннотацию для этого свойства до @Temporal(TemporalType.TIMESTAMP)? Если вы этого не сделали, то вам нужно будет (и если бы вы это сделали, вы должны были сказать так: -)).

0 голосов
/ 06 января 2017

Вам необходимо использовать @ Type (type = "org.joda.time.contrib.hibernate.PersistentDateTime") для столбца, определенного в классе сущности

0 голосов
/ 03 февраля 2010

Восстанавливали ли вы базу данных после внесения этого изменения?

Если Hibernate изначально создал таблицу, используя java.sql.Date для столбца, я не знаю, как он мог бы изменить ее, основываясь только на изменении кода Java.

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