English 中文(简体)
通过Hibernate在Oracle中存储日期
原标题:
  • 时间:2008-12-26 10:43:16
  •  标签:

我正在通过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>

该值存储在Oracle日期列中(应以秒为精度),在我看来一切正常。另外,我很惊讶11:20:27不等于11:20:27.0。或者这与时区有关吗?

任何帮助都欢迎。

Thorsten (托尔斯坦)

最佳回答

好的,我又做了一些……

  1. Oracle Date columns only store values with an accuracy of a second.
  2. Java日期包含毫秒,但通常不会打印出来。

    预期的

was actually created by a date like 11:20:27,345, which is of course not equal to 11:20:27.0

解决方案:

  • either only use full second dates to store and retrieve or
  • get hibernate to create the correct Oracle Datatype (TIMESTAMP) - this is very dependent on the dialect specified in the hibernate config (OracleDialect and Oracle10gDialect create different types).
问题回答

如果你将一个代表同一时刻的java.util.Date与一个java.sql.Date进行比较,equals(Object)将返回false(它认为不同类的两个对象永远不相等)。

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





相关问题
热门标签