【问题标题】:How to make Slick respect DB column defaults on insert?如何在插入时使 Slick 尊重 DB 列的默认值?
【发布时间】:2017-10-27 08:57:03
【问题描述】:

我在带有 Postgres DB 的 Scala Play 应用程序中使用 Slick 3.2 和 codegen。我的每个表都有一个用于 create_time 的时间戳字段,类型如下:TIMESTAMP default (now() at time zone 'utc')。我遇到的问题是 Slick 将模型字段生成为createTimestamp: Option[java.sql.Timestamp],然后在 createTimestamp 为None 时为该列插入一个显式的null。我希望行为将值完全排除在插入语句之外,以便数据库使用其默认值。有什么办法吗?

【问题讨论】:

    标签: postgresql scala slick slick-codegen


    【解决方案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") )
    

    【讨论】:

      【解决方案2】:

      我找到了一种解决方法,当您指定此列是 AutoInc 时,插入时会跳过它,而是应用默认值

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-07-20
        • 1970-01-01
        • 1970-01-01
        • 2013-05-19
        • 1970-01-01
        相关资源
        最近更新 更多