Для такого рода проблем обычно помогает предоставить версию драйвера JDBC и используемый вами диалект.
В любом случае, я понимаю, что вам действительно нужно следующее отображение (для DATE и TIME):
@Column(name = "READING_DATE")
@Temporal(TemporalType.TIMESTAMP)
private Date readingDate;
И проблема, с которой вы сталкиваетесь, как-то связана с безумием, введенным Oracle с версией 9.2, см. Что происходит с DATE и TIMESTAMP? (короче говоря, они ввели столбец TIMESTAMP
и изменили отображение типа SQL DATE
, прочитайте FAQ).Есть несколько вариантов ее решения (я, конечно, предполагаю, что вы используете отображение TemporalType.TIMESTAMP
):
Либо используйте TIMESTAMP
тип столбца (я не имею в виду TemporalType.TIMESTAMP
здесь я действительно имею в виду тип столбца на стороне БД).Но если вам не нужна наносекундная точность, это не лучший выбор.
Или установите режим совместимости oracle.jdbc.V8Compatible=true
, либо как системное свойство, либо как свойство соединения:
<property name="hibernate.connection.oracle.jdbc.V8Compatible">true</property>
Да, вы можете установить произвольные свойства подключения, как это.Из документации Hibernate:
...
Произвольные свойства соединения могут быть переданы путем добавления «hibernate.connection» к имени свойства соединения.Например, вы можете указать charSet
свойство соединения, используя hibernate.connection.charSet
.
Или используйте драйвер Oracle JDBC 11.1 (они «исправили» проблему, отменив изменение).Это ИМО идеальное решение (устаревшее V8Compatible
).
Связанные с этим проблемы