2008-12-26 80 views
0

我通过hibernate在Oracle XE数据库中存储了一个简单的java.util.date。通过Hibernate在Oracle中存储日期

当使用JUnit测试,如果我能找回正确的值,我得到这样的错误:

junit.framework.AssertionFailedError: 
    expected:<Sun Dec 28 11:20:27 CET 2008> 
    but was:<2008-12-28 11:20:27.0> 

的值存储在Oracle日期列(其中应该有一个第二精度)看起来这对我好。另外,我很惊讶11:20:27不等于11:20:27.0。或者这是否与时区有关?

任何帮助,欢迎。

托尔斯滕

回答

1

好了,工作多一些就可以了...只有

  1. Oracle日期列存储值与第二的精度。
  2. Java日期包含毫秒,但通常不会打印。所以

    预期:

实际上是由像11日期创建:20:27345,这当然是不等于11:20:27.0

解决方案:

  • 要么只使用第二次日期来存储和检索 或
  • 获取hibernate以创建正确的Oracle数据类型(TIMESTAMP) - this非常依赖于hibernate配置中指定的方言(OracleDialect和Oracle10gDialect创建不同类型)。
0

如果比较java.util.Datejava.sql.Date这两个代表同一时刻,equals(Object)将返回false(它认为不同类别的两个对象从未相等)。

您的测试需要考虑到这一点。最简单的方法是将日期转换为UNIX时间(例如java.util.Date.getTime())并比较这些值。

+0

戴夫,感谢您的想法,但那不是造成问题。 – Thorsten 2008-12-26 18:29:56