通过Hibernate在Oracle中存储日期

时间:2008-12-26 10:43:16

标签: oracle hibernate

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

当我使用JUnit进行测试时,如果我可以检索到正确的值,我会收到如下错误:

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

该值存储在Oracle Date列中(应该具有第二个精度),这对我来说没问题。另外,我很惊讶11:20:27不等于11:20:27.0。或者这与时区有关吗?

欢迎任何帮助。

和Thorsten

2 个答案:

答案 0 :(得分:1)

好的,还有更多的工作......

  1. Oracle Date列仅存储精确度为秒的值。
  2. Java日期确实包含毫秒,但通常不会打印它们。所以

    预期:

  3. 实际上是由日期11:20:27,345创建的,当然不等于11:20:27.0

    解决方案:

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

答案 1 :(得分:0)

如果您将java.util.Datejava.sql.Date进行比较,两者都代表同一时刻,equals(Object)将返回false(它会将两个不同类的对象视为从不< / strong>相等)。

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