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).