Para este tipo de problemas, generalmente ayuda proporcionar la versión del controlador JDBC y el dialecto que está utilizando.
De todos modos, tengo entendido que en realidad desea la siguiente asignación (para FECHA y HORA):
@Column(name = "READING_DATE")
@Temporal(TemporalType.TIMESTAMP)
private Date readingDate;
Y el problema que enfrenta está relacionado de alguna manera con la locura introducida por Oracle con la versión 9.2, consulte ¿Qué sucede con DATE y TIMESTAMP?
(en resumen, introdujeron un TIMESTAMP
columna y cambió la asignación de DATE
tipo SQL, lea las preguntas frecuentes). Hay varias opciones para resolverlo (supongo, por supuesto, que está utilizando un TemporalType.TIMESTAMP
asignación):
Utilice un TIMESTAMP
tipo de columna (No me refiero a TemporalType.TIMESTAMP
aquí, realmente me refiero al tipo de columna en el lado DB). Pero si no necesita una precisión de nanosegundos, esta no es la mejor opción.
O establezca oracle.jdbc.V8Compatible=true
modo de compatibilidad, ya sea como propiedad del sistema o como propiedad de conexión:
<property name="hibernate.connection.oracle.jdbc.V8Compatible">true</property>
Sí, puede establecer propiedades de conexión arbitrarias como esta. De la documentación de Hibernate:
O use el controlador Oracle JDBC 11.1 (ellos "solucionaron" el problema revirtiendo el cambio). En mi opinión, esta es la solución ideal (el V8Compatible
cosas están en desuso).