Per questo tipo di problemi, di solito è utile fornire la versione del driver JDBC e il dialetto che stai utilizzando.
Ad ogni modo, ho capito che in realtà vuoi la seguente mappatura (per DATE e TEMPO):
@Column(name = "READING_DATE")
@Temporal(TemporalType.TIMESTAMP)
private Date readingDate;
E il problema che stai affrontando è in qualche modo correlato alla follia introdotta da Oracle con la versione 9.2, vedi Cosa sta succedendo con DATE e TIMESTAMP?
(in breve, hanno introdotto un TIMESTAMP
colonna e modificato la mappatura di DATE
tipo SQL, leggi le FAQ). Ci sono diverse opzioni per risolverlo (ovviamente presumo che tu stia usando un TemporalType.TIMESTAMP
mappatura):
Usa un TIMESTAMP
tipo di colonna (Non intendo TemporalType.TIMESTAMP
qui, intendo davvero il tipo di colonna sul lato DB). Ma se non hai bisogno di una precisione di nanosecondi, questa non è la scelta migliore.
Oppure imposta oracle.jdbc.V8Compatible=true
modalità di compatibilità, sia come proprietà di sistema che come proprietà di connessione:
<property name="hibernate.connection.oracle.jdbc.V8Compatible">true</property>
Sì, puoi impostare proprietà di connessione arbitrarie come questa. Dalla documentazione di Hibernate:
Oppure usa il driver Oracle JDBC 11.1 (hanno "risolto" il problema annullando la modifica). Questa è IMO la soluzione ideale (il V8Compatible
roba è deprecata).