Slick DSL provides two ways to create additional fields in tables.
In this case, the class:
case class User(id: Option[Long] = None, fname: String, lname: String)
You can create a table mapping in one of the following ways:
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 _) }
and
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 _) } }
What is the difference between the two? Is this path old and the other new, or do they serve different purposes?
I prefer the second option when you define the identifier as optional as part of the identifier definition, because it is more consistent.
source share