如何在插入时使Slick尊重DB列默认值?

时间:2017-05-26 12:45:51

标签: postgresql scala slick slick-codegen

我在使用Postgres数据库的Scala Play应用程序中使用Slick 3.2和codegen。我的每个表都有一个create_time的时间戳字段,具有以下类型:TIMESTAMP default (now() at time zone 'utc')。我遇到的问题是,Slick会将模型字段生成为createTimestamp: Option[java.sql.Timestamp],然后在createTimestamp为null时为该列插入显式None。我喜欢这种行为,而是将值完全从insert语句中删除,以便DB使用其默认值。有没有办法做到这一点?

2 个答案:

答案 0 :(得分:1)

您可以尝试以下内容:

插入

的对象
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") )

答案 1 :(得分:0)

我找到了一种解决方法,当您指定此列为AutoInc时,将在插入时跳过该列,而将采用默认值

   def createdAt = column[Instant]("created_at", O.AutoInc)