Slick DSL 提供了两种创建表中可选字段的方式。
对于这个 case class:
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定义的可选部分,因为这样更加一致。