Hibernate将NULL时间戳解释为当前日期/时间

时间:2015-08-07 18:48:42

标签: java mysql hibernate

我有一个名为expirationDate的MySQL数据库表,它被定义为默认为NULL的时间戳。我有一个方法从表中提取符合各种条件的所有记录,然后打印每个记录的列值作为调试例程的一部分。

当查看返回的记录时,我注意到DB中具有NULL expirationDate的记录被返回到我的程序,expirationDate设置为当前日期/时间。

这是正常行为吗?如果是这样,它是否可配置(我希望值保持为NULL)?

我正在使用Hibernate 3.x库。

1 个答案:

答案 0 :(得分:0)

不是Hibernate将null值转换为当前时间戳,它是MySQL。至少这是最可能的原因。 TIMESTAMP列的行为取决于多个参数:

  • 是否是表格中的第一个TIMESTAMP列(适用不同的默认值)
  • 表引擎(MyISAM或InnoDB)
  • 配置(MAXDB设置)
  • 您的MySQL版本

当然行为是sufficiently defined,也与TIMESTAMP and NULL values有关,但仍然令人困惑。我停止使用许多MySQL自动化功能,例如: G。因为以后会有其他人不得不处理代码和表格。

您应该使用MySQL命令行客户端或PMA检查表中的值和CREATE TABLE的输出。您的表中是否有null个值?

如果你的表是由Hibernate 3创建的,那么生成的DDL语句也可能是错误的(参见this post)。