如何让 Slick 在插入时尊重数据库列的默认值?
How to make Slick respect DB column defaults on insert?
我在带有 Postgres DB 的 Scala Play 应用程序中使用带有代码生成器的 Slick 3.2。我的每个表都有一个 create_time 的时间戳字段,类型如下:TIMESTAMP default (now() at time zone 'utc')
。我 运行 遇到的问题是 Slick 将模型字段生成为 createTimestamp: Option[java.sql.Timestamp]
,然后在 createTimestamp 为 None
时为该列插入显式 null
。我希望该行为完全将值从插入语句中保留下来,以便数据库使用其默认值。有什么办法吗?
您可以尝试以下操作:
插入对象
class YourModel(id: Option[Long], name: String, someOtherField: String, createdAt: Option[Timestamp])
根本不提供 ID 和时间戳:
val table = TableQuery[YourModelTable]
db.run( table.map( t => (t.name, t.someOtherField) ) += ("MyName", "MyOtherField") )
我找到了一个解决方法,当您指定此列为 AutoInc 时,插入时将跳过它,而是应用默认值
def createdAt = column[Instant]("created_at", O.AutoInc)
我在带有 Postgres DB 的 Scala Play 应用程序中使用带有代码生成器的 Slick 3.2。我的每个表都有一个 create_time 的时间戳字段,类型如下:TIMESTAMP default (now() at time zone 'utc')
。我 运行 遇到的问题是 Slick 将模型字段生成为 createTimestamp: Option[java.sql.Timestamp]
,然后在 createTimestamp 为 None
时为该列插入显式 null
。我希望该行为完全将值从插入语句中保留下来,以便数据库使用其默认值。有什么办法吗?
您可以尝试以下操作:
插入对象
class YourModel(id: Option[Long], name: String, someOtherField: String, createdAt: Option[Timestamp])
根本不提供 ID 和时间戳:
val table = TableQuery[YourModelTable]
db.run( table.map( t => (t.name, t.someOtherField) ) += ("MyName", "MyOtherField") )
我找到了一个解决方法,当您指定此列为 AutoInc 时,插入时将跳过它,而是应用默认值
def createdAt = column[Instant]("created_at", O.AutoInc)