我知道Slick不是ORM,因此不了解关系。鉴于此,光滑的Table类几乎反映了底层数据库表,例如它们将包含addressId属性,而不是Address属性。这一切对我都有意义。
我不明白为什么如果案例类也必须镜像表格,我还会使用案例类?鉴于我理解的典型人物,地址示例,我不能轻易使用:
case class Person(id: Option[Int], name: String, address: Option[Address])
因为光滑不能从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类case class Person(id: Option[Int], name: String, address: Option[Int])
几乎是PersonTable的镜像?
答案 0 :(得分:0)
Slick Table
是一个复杂的,提升类型,你不想直接使用它。你想要使用的是一些“普通”scala类型的序列。您正在创建的Person
案例类是您可以使用的“普通”Scala类型。可以把它想象成你的关系数据最终逃离关系模型并最终进入面向对象的领域。