【发布时间】: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”定义(在创建之后)?
【问题讨论】: