【问题标题】:Storing Dates in Oracle via Hibernate通过 Hibernate 在 Oracle 中存储日期
【发布时间】:2010-09-28 11:09:26
【问题描述】:

我通过休眠将一个简单的 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>

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

欢迎任何帮助。

索斯滕

【问题讨论】:

    标签: oracle hibernate


    【解决方案1】:

    如果你比较 java.util.Datejava.sql.Date 两者都代表相同的时间,equals(Object) 将返回 false(它认为不同类的两个对象从不相等) .

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

    【讨论】:

    • 戴夫,谢谢你的想法,但这不是问题的根源。
    【解决方案2】:

    好的,继续努力...

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

      预期:

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

    解决方案:

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

    【讨论】:

      猜你喜欢
      • 2017-11-01
      • 1970-01-01
      • 1970-01-01
      • 2015-10-24
      • 1970-01-01
      • 2016-08-07
      • 1970-01-01
      • 1970-01-01
      • 2017-12-24
      相关资源
      最近更新 更多