Voor dit soort problemen helpt het meestal om de versie van het JDBC-stuurprogramma en het dialect dat u gebruikt op te geven.
Hoe dan ook, ik heb begrepen dat je eigenlijk de volgende toewijzing wilt (voor DATE en TIJD):
@Column(name = "READING_DATE")
@Temporal(TemporalType.TIMESTAMP)
private Date readingDate;
En het probleem waarmee u wordt geconfronteerd, is op de een of andere manier gerelateerd aan de waanzin die door Oracle is geïntroduceerd met versie 9.2, zie Wat is er aan de hand met DATE en TIMESTAMP?
(kortom, ze introduceerden een TIMESTAMP kolom en veranderde de toewijzing van de DATE SQL-type, lees de FAQ). Er zijn verschillende opties om het op te lossen (ik ga er natuurlijk van uit dat je een TemporalType.TIMESTAMP gebruikt in kaart brengen):
Gebruik een TIMESTAMP kolomtype (Ik bedoel niet TemporalType.TIMESTAMP hier bedoel ik echt het kolomtype aan de DB-kant). Maar als je geen nanoseconde precisie nodig hebt, is dit niet de beste keuze.
Of stel de oracle.jdbc.V8Compatible=true . in compatibiliteitsmodus, hetzij als systeemeigenschap of als verbindingseigenschap:
<property name="hibernate.connection.oracle.jdbc.V8Compatible">true</property>
Ja, u kunt op deze manier willekeurige verbindingseigenschappen instellen. Uit de Hibernate-documentatie:
Of gebruik het Oracle JDBC 11.1-stuurprogramma (ze hebben het probleem "opgelost" door de wijziging ongedaan te maken). Dit is IMO de ideale oplossing (de V8Compatible dingen zijn verouderd).