对于此类问题,通常有助于提供JDBC驱动程序的版本和您使用的方言。
无论如何,我的理解是您实际上需要以下映射(对于DATE 和 TIME):
@Column(name = "READING_DATE")@Temporal(TemporalType.TIMESTAMP)private Date readingDate;
而且您面临的问题与Oracle在9.2版中引入的疯狂有关,请参见DATE和TIMESTAMP发生了什么?(简而言之,他们引入了一个
TIMESTAMP列并更改了
DATESQL类型的映射,请阅读FAQ)。有几种解决方法(我当然假设您正在使用
TemporalType.TIMESTAMP映射):
要么使用
TIMESTAMP列类型
(我不是
TemporalType.TIMESTAMP在这里,我的意思是在数据库方面的列类型)。但是,如果您不需要纳秒级的精度,那不是最佳选择。
或将
oracle.jdbc.V8Compatible=true兼容性模式设置为系统属性或连接属性:
<property name="hibernate.connection.oracle.jdbc.V8Compatible">true</property>
是的,您可以像这样设置任意的连接属性。从Hibernate文档中:
3.3。JDBC连接
…
可以通过在连接属性名称之前添加“ hibernate.connection”来指定任意连接属性。例如,您可以使用指定
charSet
连接属性hibernate.connection.charSet。
或使用Oracle JDBC
11.1驱动程序(它们通过还原更改来“解决”该问题)。这是IMO的理想解决方案(
V8Compatible不推荐使用的东西)。
相关问题
- HHH-1566



