2012-02-13 56 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