Le Slick DSL permet de créer des champs facultatifs dans les tables de deux façons.Description des champs facultatifs dans Slick
Pour cette classe de cas:
case class User(id: Option[Long] = None, fname: String, lname: String)
Vous pouvez créer un mappage de table dans l'une des façons suivantes:
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 _)
}
et
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 _)
}
}
Quelle est la différence entre la deux? Est-ce que l'un ancienne façon et l'autre nouvelle façon, ou servent-ils à des fins différentes?
Je préfère le deuxième choix où vous définissez l'identité comme facultative dans le cadre de la définition de l'ID car elle est plus cohérente.