2008-12-26 39 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

相關問題