gpt4 book ai didi

scala - 描述 Slick 中的可选字段

转载 作者:行者123 更新时间:2023-12-05 01:17:47 27 4
gpt4 key购买 nike

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")不用担心你不感兴趣的领域。

关于scala - 描述 Slick 中的可选字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13357067/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com