【问题标题】:Why use case classes with Slick?为什么用 Slick 使用案例类?
【发布时间】:2016-03-14 11:43:45
【问题描述】:

我了解 Slick 不是 ORM,因此不了解关系。鉴于此,光滑的 Table 类几乎反映了底层数据库表,例如它们将包括 addressId 属性,而不是 Address 属性。这一切对我来说都很有意义。

我不明白的是,如果案例类还必须镜像表,为什么我还要使用案例类?鉴于我理解的典型 Person, Address 示例,我不能轻易使用:

case class Person(id: Option[Int], name: String, address: Option[Address])

因为 slick 无法从 addressId 映射到 Option[Address] 即

class PersonTable(tag: Tag) extends Table[Person](tag, "PERSON") {
  def id = column[Long]("id", O.PrimaryKey, O.AutoInc)
  def name = column[String]("name")
  def addressId = column[Int]("address_id")
  def * = (id, name, addressId) <> (Person.tupled, Person.unapply) 
}

所以我需要创建一个 Person 案例类,如下所示:

case class Person(id: Option[Int], name: String, address: Option[Int])

这几乎是 PersonTable 的镜像?

【问题讨论】:

    标签: slick


    【解决方案1】:

    Slick Tables 是一种复杂的提升类型,您不想直接使用它。您要使用的是一些“正常” scala 类型的序列。您正在创建的 Person 案例类是您可以使用的这种“普通”scala 类型。将其视为您的关系数据最终逃离关系模型并最终进入面向对象的领域。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-03-13
      • 2013-01-25
      • 1970-01-01
      • 2017-02-08
      • 2019-07-16
      • 1970-01-01
      • 2013-11-23
      • 2022-01-23
      相关资源
      最近更新 更多