【问题标题】:Describing optional fields in Slick在 Slick 中描述可选字段
【发布时间】:2012-11-01 15:57:30
【问题描述】:

Slick DSL 允许通过两种方式在表中创建可选字段。

对于这个案例类:

case class User(id: Option[Long] = None, fname: String, lname: String)

您可以通过以下方式之一创建表映射:

object Users extends Table[User]("USERS") {
    def id = column[Int]("id", O.PrimaryKey, O.AutoInc)
    def fname = column[String]("FNAME")
    def lname = column[String]("LNAME")
    def * = id.? ~ fname ~ lname <> (User, User.unapply _)
  }

  object Users extends Table[User]("USERS") {
    def id = column[Option[Long]]("id", O.PrimaryKey, O.AutoInc)
    def fname = column[String]("FNAME")
    def lname = column[String]("LNAME")
    def * = id ~ fname ~ lname <> (User, User.unapply _)
  }
}

这两者有什么区别?一种是旧方法,另一种是新方法,还是它们的用途不同?

我更喜欢将身份定义为可选作为 id 定义的一部分的第二种选择,因为它更加一致。

【问题讨论】:

    标签: scala scalaquery slick


    【解决方案1】:

    第一个中的.? 运算符允许您将选择字段作为可选字段的选择推迟到定义投影的那一刻。有时这不是您想要的,但是将您的 PK 定义为 Option 可能有点有趣,因为人们可能期望 PK 是 NOT NULL

    您可以在*之外的其他投影中使用.?,例如:

    def partial = id.? ~ fname
    

    那么您可以使用Users.partial.insert(None, "Jacobus") 而不必担心您不感兴趣的字段。

    【讨论】:

      猜你喜欢
      • 2021-10-07
      • 2017-08-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-05-18
      • 1970-01-01
      • 1970-01-01
      • 2018-01-24
      相关资源
      最近更新 更多