在SLICK中描述可选字段 [英] Describing optional fields in Slick
本文介绍了在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定义的一部分,因为它更一致。
推荐答案
第一个运算符中的.?
允许您将字段设置为可选的选择推迟到定义投影的时刻。有时这不是您想要的,但将您的PK定义为Option
可能有点有趣,因为您可能会认为PK是NOT NULL
。
您可以在*
之外的其他投影中使用.?
,例如:
def partial = id.? ~ fname
然后您可以执行Users.partial.insert(None, "Jacobus")
操作,而不必担心您不感兴趣的字段。
这篇关于在SLICK中描述可选字段的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文