За този вид проблеми обикновено помага да предоставите версията на JDBC драйвера и диалекта, който използвате.
Както и да е, разбирам, че всъщност искате следното съпоставяне (за ДАТА и ВРЕМЕ):
@Column(name = "READING_DATE")
@Temporal(TemporalType.TIMESTAMP)
private Date readingDate;
И проблемът, с който се сблъсквате, по някакъв начин е свързан с лудостта, въведена от Oracle с версия 9.2, вижте Какво става с DATE и TIMESTAMP?
(накратко, те въведоха TIMESTAMP
колона и промени съпоставянето на DATE
тип SQL, прочетете ЧЗВ). Има няколко опции за решаването му (разбира се, предполагам, че използвате TemporalType.TIMESTAMP
картографиране):
Използвайте или TIMESTAMP
тип колона (Нямам предвид TemporalType.TIMESTAMP
тук наистина имам предвид типа колона от страна на DB). Но ако не се нуждаете от наносекунда точност, това не е най-добрият избор.
Или задайте oracle.jdbc.V8Compatible=true
режим на съвместимост, или като системно свойство, или като свойство на връзка:
<property name="hibernate.connection.oracle.jdbc.V8Compatible">true</property>
Да, можете да зададете произволни свойства на връзката като това. От документацията на Hibernate:
Или използвайте драйвера Oracle JDBC 11.1 (те "поправиха" проблема, като върнаха промяната). Това е IMO идеалното решение (V8Compatible
нещата са отхвърлени).