在SLICK中描述可选字段 [英] Describing optional fields in Slick

查看:0
本文介绍了在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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆