通过Hibernate在Oracle中存储日期

通过Hibernate在Oracle中存储日期,oracle,hibernate,Oracle,Hibernate,我通过hibernate将一个简单的java.util.date存储在Oracle XE数据库中 当使用JUnit测试是否可以检索到正确的值时,会出现如下错误: junit.framework.AssertionFailedError: expected:<Sun Dec 28 11:20:27 CET 2008> but was:<2008-12-28 11:20:27.0> junit.framework.AssertionFailedError: 预期

我通过hibernate将一个简单的java.util.date存储在Oracle XE数据库中

当使用JUnit测试是否可以检索到正确的值时,会出现如下错误:

junit.framework.AssertionFailedError: 
  expected:<Sun Dec 28 11:20:27 CET 2008> 
  but was:<2008-12-28 11:20:27.0>
junit.framework.AssertionFailedError:
预期:
但是:
该值存储在Oracle日期列中(该列应具有第二个精度),在我看来,该列没有问题。而且,我很惊讶11:20:27不等于11:20:27.0。或者这与时区有关

欢迎任何帮助


Thorsten

如果将
java.util.Date
java.sql.Date
进行比较,两者都表示相同的时间瞬间,
equals(Object)
将返回false(它认为不同类的两个对象永远不相等)


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

好的,我们在这方面做了更多工作

  • Oracle日期列仅存储精度为秒的值
  • Java日期确实包含毫秒,但通常不打印。所以

    预期:

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

    解决方案:

    • 或者只使用完整的第二个日期来存储和检索 或
    • 让hibernate创建正确的Oracle数据类型(时间戳)-这非常依赖于hibernate配置中指定的方言(OracleDialogue和Oracle10gDialogue创建不同的类型)

    Dave,谢谢你的建议,但这并不是问题的根源。