【问题标题】:Column cannot be null (MySQL and Hibernate)列不能为空(MySQL 和 Hibernate)
【发布时间】:2013-07-14 08:02:15
【问题描述】:

我有一个带有如下列的架构。不允许空值,默认值为CURRENT_TIMESTAMP。我正在使用休眠将数据插入到包含此列的表中。但是休眠失败并出现以下错误。在我的 DAO 中,我没有为 updateTime 设置任何值。

Error:
Column 'updateTime' cannot be null. 

Column Schema:
updateTime  timestamp CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP

谢谢

【问题讨论】:

  • 你发现了吗?突然之间,我们看到了同样的问题。我们想知道这是否与 MySQL 5.6 不兼容。
  • Grey,我还发现 MySQL 5.6 中出现了这个问题。我降级到 5.5,我们不再看到这个问题。
  • 迷人的@Thakur。我们只是在工作时遇到了与休眠和 5.6 类似的问题。 ORMLite 应该允许某些机制在特定列上执行插入操作。这就是解决方案。

标签: mysql hibernate


【解决方案1】:

这是对我有用的 MySQL 8.0 版

  • MySQL 列定义:

  • 实体定义:

     @Basic(optional = false)
     @Column(name = "date_created", insertable = false, updatable = false)
     @Temporal(TemporalType.TIMESTAMP)
     private Date dateCreated;
    

【讨论】:

    【解决方案2】:

    尝试在您的列定义中添加DEFAULT CURRENT_TIMESTAMP 选项以归档如下内容:

    updateTime TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
    

    您可以使用以下 DDL 查询来做到这一点:

    ALTER TABLE `your_table` MODIFY updateTime TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP;
    

    或者只是删除并重新创建您的表。

    在带有DEFAULT CURRENT_TIMESTAMP 选项的情况下,updateTime 列将在 MySQL 服务器插入期间自动填充。详情请见this entry of official documentation

    【讨论】:

      猜你喜欢
      • 2018-09-11
      • 1970-01-01
      • 2021-10-22
      • 2017-04-09
      • 2016-07-30
      • 1970-01-01
      • 2020-11-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多