加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

scala – 在Slick中描述可选字段

发布时间:2020-12-16 10:03:40 所属栏目:安全 来源:网络整理
导读: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.Prima
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.AutoInc)
    def fname = column[String]("FNAME")
    def lname = column[String]("LNAME")
    def * = id ~ fname ~ lname <> (User,User.unapply _)
  }
}

两者有什么区别?一个是旧方式而另一个是新方式,还是它们用于不同目的?

我更喜欢第二种选择,你将身份定义为可选的身份定义的一部分,因为它更加一致.

解决方法

.?第一个操作符允许您推迟选择在定义投影时将字段设置为可选字段.有时这不是你想要的,但将你的PK定义为一个选项可能有点滑稽,因为人们可能期望PK为NOT NULL.

您可以使用 .?在除*之外的其他预测中,例如:

def partial = id.? ~ fname

然后你可以做Users.partial.insert(无,“雅各布斯”)而不用担心你不感兴趣的字段.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读