2012-02-13 31 views
1

場景:SQL錯誤 - datetime數據截斷 - 用java /休眠/ timestamp屬性

我已經接收個XML,解析他們的servlet(使用JAXB),仍然存在解析數據到MySQL數據庫(使用休眠)並保存xml的副本以供將來參考。 解析失敗時也會保存這個xml。 在這些情況下,我會收到一封包含錯誤摘要的電子郵件,然後檢查保存的xml以找出錯誤的線索。

該操作運行相當順利。該servlet每天接收幾千xmls。

問題:

每天至少一次,我得到這樣的錯誤:

org.hibernate.exception.DataException: could not insert .......... 
Caused by: com.mysql.jdbc.MysqlDataTruncation: Data truncation: Incorrect datetime value: '20122012-01-22 15:20:51' for column 'createdAt' at row 1 

我得到這個錯誤對其他一些「列」爲好。 這些列是mysql端的日期時間類型,而java端是java.sql.Timestamp

當我看看這是收到我看到正確的日期格式的XML:「2012-01-22 15時二十分51秒」

任何想法可能是什麼出了問題?

+0

看起來真奇怪。我懷疑還有另外一個將數據插入這個表的過程(也許也可以通過Hibernate,但HQL?)。嘗試設置'org.hibernate.SQL = TRACE'日誌級別,並確保源代碼正是您所期望的。 – 2012-02-19 13:35:43

+0

我會在幾天後嘗試這個,在其他東西上工作...... – samz 2012-02-21 07:54:28

回答

0

最近沒有得到這個錯誤。 我最近採取了SimpleDateFormat用法的併發問題,所以也許這就是問題所在。

+0

是的,就是這樣。我解析了一個jaxb值適配器來解析時間戳,並且它使用了一個非線程安全的時間戳格式器。更改爲線程安全之後,一切正常。 – samz 2012-07-27 04:43:02