Slick 生成的模式代码将不需要的 ON UPDATE 触发器添加到字段。
Slick generated schema code adds an unwanted ON UPDATE trigger to field.
我在 MySql 5.6.33 中使用 Slick 3.1.1。
我执行了 schema code generation 以生成用于在我们的生产服务器中表示 'invoices' table 的代码。
这是生成的代码的一部分。
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 所述)在本地创建 table,发现创建的 table 包含以下两列:
`created_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
`updated_at` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
但是,生产服务器中 'invoices' table 的相同列在没有默认值或 ON UPDATE 触发器的情况下定义:
`created_at` datetime NOT NULL,
`updated_at` datetime NOT NULL,
这些差异导致我的测试失败,因为每次我更新一行时,字段 'created_at' 也会更新为当前时间戳(而我需要该字段保持其现有值)。
为什么会存在这些差异?为什么 Slick 添加 'ON UPDATE CURRENT_TIMESTAMP' 段?有没有办法阻止 Slick 添加“ON UPDATE CURRENT_TIMESTAMP”,或者至少有一种方法可以从 [=38] 中删除 'ON UPDATE' 定义=](创建后)?
我找到了一个强制定义列的方法。我不得不手动编辑生成的代码:
val createdAt = column[java.sql.Timestamp]("created_at", SqlType("datetime not null"))
This blog post 帮了我。
我在 MySql 5.6.33 中使用 Slick 3.1.1。
我执行了 schema code generation 以生成用于在我们的生产服务器中表示 'invoices' table 的代码。 这是生成的代码的一部分。
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 所述)在本地创建 table,发现创建的 table 包含以下两列:
`created_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
`updated_at` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
但是,生产服务器中 'invoices' table 的相同列在没有默认值或 ON UPDATE 触发器的情况下定义:
`created_at` datetime NOT NULL,
`updated_at` datetime NOT NULL,
这些差异导致我的测试失败,因为每次我更新一行时,字段 'created_at' 也会更新为当前时间戳(而我需要该字段保持其现有值)。
为什么会存在这些差异?为什么 Slick 添加 'ON UPDATE CURRENT_TIMESTAMP' 段?有没有办法阻止 Slick 添加“ON UPDATE CURRENT_TIMESTAMP”,或者至少有一种方法可以从 [=38] 中删除 'ON UPDATE' 定义=](创建后)?
我找到了一个强制定义列的方法。我不得不手动编辑生成的代码:
val createdAt = column[java.sql.Timestamp]("created_at", SqlType("datetime not null"))
This blog post 帮了我。