För den här typen av problem hjälper det vanligtvis att tillhandahålla versionen av JDBC-drivrutinen och dialekten du använder.
Hur som helst, jag förstår att du faktiskt vill ha följande mappning (för DATUM och TID):
@Column(name = "READING_DATE")
@Temporal(TemporalType.TIMESTAMP)
private Date readingDate;
Och problemet du står inför är på något sätt relaterat till galenskapen som introducerades av Oracle med version 9.2, se Vad händer med DATUM och TIDSTÄMPEL?
(kort sagt introducerade de en TIMESTAMP
kolumnen och ändrade mappningen av DATE
SQL-typ, läs FAQ). Det finns flera alternativ för att lösa det (jag antar naturligtvis att du använder en TemporalType.TIMESTAMP
kartläggning):
Använd antingen en TIMESTAMP
kolumntyp (Jag menar inte TemporalType.TIMESTAMP
här menar jag verkligen kolumntypen på DB-sidan). Men om du inte behöver nanosekundsprecision är detta inte det bästa valet.
Eller ställ in oracle.jdbc.V8Compatible=true
kompatibilitetsläge, antingen som systemegenskap eller som en anslutningsegenskap:
<property name="hibernate.connection.oracle.jdbc.V8Compatible">true</property>
Ja, du kan ställa in godtyckliga anslutningsegenskaper så här. Från Hibernate-dokumentationen:
Eller använd Oracle JDBC 11.1-drivrutinen (de "fixade" problemet genom att återställa ändringen). Detta är IMO den idealiska lösningen (den V8Compatible
). saker är utfasade).