对于这类问题,通常有助于提供JDBC驱动程序的版本和您正在使用的方言.
无论如何,我的理解是你实际上想要以下映射(对于DATE和TIME):
@Column(name = "READING_DATE")
@Temporal(TemporalType.TIMESTAMP)
private Date readingDate;
而你遇到的问题在某种程度上与Oracle在版本9.2中引入的疯狂有关,请参见What is going on with DATE and TIMESTAMP?(简而言之,他们引入了TIMESTAMP列并更改了DATE SQL类型的映射,请阅读常见问题解答).有几种方法可以解决它(我当然假设您正在使用TemporalType.TIMESTAMP映射):
使用TIMESTAMP列类型(我不是指TemporalType.TIMESTAMP,我的意思是DB侧的列类型).但如果您不需要纳秒精度,这不是最佳选择.
或者将oracle.jdbc.V8Compatible = true兼容模式设置为系统属性或连接属性:
true
是的,您可以像这样设置任意连接属性.从Hibernate文档:
07001
…
Arbitrary connection properties can be given by prepending “hibernate.connection” to the connection property name. For example, you can specify a charSet connection property using hibernate.connection.charSet.
或者使用Oracle JDBC 11.1驱动程序(它们通过还原更改来“修复”问题).这是IMO的理想解决方案(不推荐使用V8兼容的东西).
相关问题