使用Oracle Date with Hibernate时的日期/时间的Java类型

我们有一个Oracle Date列。 首先在我们的Java / Hibernate类中,我们使用java.sql.Date 。 这有效,但是当我们保存时它似乎没有在数据库中存储任何时间信息所以我将Java数据类型更改为Timestamp。 现在我们得到这个错误:

springframework.beans.factory.BeanCreationException:在类路径资源[margin-service-domain -config.xml]中定义名称为’org.springframework.dao.an notation.PersistenceExceptionTranslationPostProcessor#0’的bean创建错误:bean的初始化失败; 嵌套exception是org.springframework.beans.factory.BeanCreatio nException:创建类路径资源[m-service-doma in-config.xml]中定义的名为’sessionFactory’的bean时出错:init方法的调用失败; 嵌套exception是org.hibernate.HibernateException:错误的列类型:CREATE_TS,expected:timestamp

关于如何在保留时间部分的同时映射Oracle Date任何想法?


更新:如果我使用Oracle Timestamp数据类型,我可以使它工作,但我不希望理想的精度水平。 只想要基本的Oracle Date

不是直接的答案,但我使用Oracle TIMESTAMP类型:

  • TIMESTAMP(fractional_seconds_ precision)日期的年,月和日值,以及小时,分钟和秒的时间值,其中fractional_seconds_precision可选地指定SECOND日期时间字段的小数部分中的位数,并且可以是数字在0到9的范围内。默认值为6.例如,您将TIMESTAMP指定为文字,如下所示:

     TIMESTAMP'1997-01-31 09:26:50.124' 

使用所需的fractional_second_precision

我总是将java.util.Date与Oracle日期一起使用,它处理日期和时间就好了。

也许你有这个问题? 确保您拥有最新的JDBC驱动程序,文件名应为ojdbc5.jar。

首先 – 你是正确的,你需要使用java.sql.Timestamp类,因为java.sql.Date类显然不代表一天中的特定时间(相反,它试图表示午夜GMT)。

至于你的错误 – 你没有提供足够的信息来做任何事情而不是猜测(它需要查看你的Hibernate配置和类来实际确定原因)。 但是 ,如果您只是更改了Java类中字段的类,那么您当然也必须更新Hibernate映射。 如果你还没有完成后者,那么这可能会导致你的不匹配。 尝试为相应的映射显式指定type="timestamp"

编辑:如果您正在使用注释,那么您是否将该属性的注释更新为@Temporal(TemporalType.TIMESTAMP) ? 如果你没有,那么你将需要(如果你这样做,你应该这样说:-))。

进行此更改后,您是否重新创建了数据库?

如果Hibernate最初使用java.sql.Date为列创建表,我不知道它可以根据单独的Java代码更改来改变它。

您需要对实体类中定义的列使用@Type(type =“org.joda.time.contrib.hibernate.PersistentDateTime”)