【问题标题】:Slick generated schema code adds an unwanted ON UPDATE trigger to field.Slick 生成的模式代码将不需要的 ON UPDATE 触发器添加到字段。
【发布时间】:2016-12-28 14:46:02
【问题描述】:

我正在使用 Slick 3.1.1 和 MySql 5.6.33。

我执行了schema code generation 来生成代码,用于在我们的生产服务器中表示“发票”表。 这是生成的代码片段。

class Invoices(_tableTag: Tag) extends Table[InvoicesRow](_tableTag, "invoices") {
...
  /** Database column created_at SqlType(DATETIME) */
  val createdAt: Rep[java.sql.Timestamp] = column[java.sql.Timestamp]("created_at")
  /** Database column updated_at SqlType(DATETIME) */
  val updatedAt: Rep[java.sql.Timestamp] = column[java.sql.Timestamp]("updated_at")
...}

然后我在本地创建表,使用生成的代码(解释here),发现创建的表包含以下2列:

`created_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
`updated_at` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',

但是,生产服务器中“发票”表的相同列的定义没有默认值或 ON UPDATE 触发器:

`created_at` datetime NOT NULL,
`updated_at` datetime NOT NULL,

这些差异导致我的测试失败,因为每次我更新一行时,“created_at”字段也会使用当前时间戳进行更新(而我需要该字段保持其现有值)。

为什么会存在这些差异?为什么 Slick 添加 'ON UPDATE CURRENT_TIMESTAMP' 段?有没有办法阻止 Slick 添加“ON UPDATE CURRENT_TIMESTAMP”,或者至少有一种方法可以从表中删除“ON UPDATE”定义(在创建之后)?

【问题讨论】:

    标签: mysql scala slick


    【解决方案1】:

    我找到了一个强制列定义的方法。我不得不手动编辑生成的代码:

      val createdAt = column[java.sql.Timestamp]("created_at", SqlType("datetime not null"))
    

    This blog post 帮助了我。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-03-16
      • 2021-10-12
      • 2013-01-27
      • 1970-01-01
      • 2014-12-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多