【问题标题】:Hibernate interprets NULL timestamp as current date/timeHibernate 将 NULL 时间戳解释为当前日期/时间
【发布时间】:2015-08-07 18:48:41
【问题描述】:

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

查看返回的记录时,我注意到数据库中过期日期为 NULL 的记录被返回到我的程序,过期日期设置为当前日期/时间。

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

我正在使用 Hibernate 3.x 库。

【问题讨论】:

  • 请发布您的标准和模型映射代码。这样会更容易回答你。

标签: java mysql hibernate


【解决方案1】:

不是 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)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-03-10
    • 1970-01-01
    • 2013-09-26
    • 1970-01-01
    • 1970-01-01
    • 2010-12-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多