在過去的幾個小時裏,我一直在調試這個問題,但沒有成功,我想我會把它拋出去看看它在哪裏。使用Hibernate將java.util.Date持久化到MySql中的問題
我正在開發一個Java程序,它使用Hibernate和DAO/DTO模式將數據保存到MySql數據庫中。在我的數據庫中,我有一個memberprofile
表和firstLoginDate
列。在數據庫中,該列的SQL類型是DateTime。 Hibernate的XML文件的相應部分是
<property name="firstLoginDate" type="timestamp">
<column name="firstLoginDate" sql-type="DATETIME"/>
</property>
然而,當我嘗試將Date
保存到該表(在Java中),「約會」(年/月/日),部分是正確的堅持,但「時間」部分(小時:分鐘:秒)不是。例如,如果我試圖保存代表2009-09-01 14:02:23
的Java日期,那麼數據庫中的結果是2009-09-01 00:00:00
。
我已經確認我自己的代碼不是踩踏時間組件;就我所見到的源代碼而言(調試時)時間組件保持正確。但是,在提交更改之後,我可以使用MySql查詢瀏覽器檢查相關行(或者只是從我的Java代碼中從數據庫中取出),並且確實缺少時間組件。有任何想法嗎?
我確實嘗試了堅持java.sql.Timestamp
而不是java.util.Date
,但問題依然存在。另外,我在另一個表格中有一個非常類似的列,根本沒有表現出這種行爲。
我希望你們會有問題,所以我會根據需要進行編輯。謝謝!
編輯@Nate:
...
MemberProfile mp = ...
Date now = new Date();
mp.setFirstLoginDate(now);
...
MemberProfile
是相當多的DTO的包裝類;設置第一個登錄日期將設置DTO的一個字段,然後提交更改。
編輯2:這似乎是我的機器上纔會發生。我已經嘗試過重建表模式並清除所有本地源代碼並從CVS重新檢出,但沒有任何改進。現在我真的很難過。
編輯3:完全擦我的MySQL安裝,重新安裝,並從已知良好的副本還原數據庫也沒有解決問題。
您如何在Java代碼中設置firstLoginDate值? – Nate 2009-09-01 20:36:43