Slick - 一对多 table 架构
Slick - one to many table schema
假设我有如下情况class:
case class Warehouse(name:String, products:Seq[Product])
case class Product(name:String)
我想定义一个绑定到 Warehouse
类型的 table
class Warehouses(tag: Tag) extends Table[Warehouse](tag, "warehouses") {
def id = column[UUID]("id", O.PrimaryKey)
def name = column[String]("name")
def products = ???
}
我可以用元组定义我的 table 并从 Products
引用 Warehouses
- 这将是我需要的一对多关系。但是我需要我的表来反映我的域 classes 以便我可以执行 DBIO 操作并得到 Warehouse
而不是元组:
val warehouses = TableQuery[Warehouses]
db.run(warehouses.filter(_.id === 2).result.head) //this is of type Warehouse
如何根据包含集合的案例 class 定义模式?
Slick 不是 ORM
因此,Slick 不支持像 hibernate 这样的嵌套对象。如果您强烈希望嵌套对象模型 Slick 不是适合您用例的 suitable 解决方案。这一点在华而不实的文档中也有明确提及。
您在 Slick 中的用例是这样建模的
case class WarehouseModel(name:String, id: Long)
case class ProductModel(name:String, productId: Long)
case class WarehouseProductsModel(warehouseId: Long, productId: Long)
WarehouseProductsModel
捕获 Product 和 Warehouse
之间的 one-many
关系
请注意,上面的设计看起来像是在一对多关系的情况下人们会选择做的典型数据库设计。在 Slick 中,这些模型表示关系 tables。因此,对于每个 table,我们需要一个模型来表示代码中的 table。 Slick 有助于编写 sql 不可知、可组合、可重用、类型安全和 scala 集合之类的查询。因此,Slick 代码最终看起来像 Scala 集合操作代码。
假设我有如下情况class:
case class Warehouse(name:String, products:Seq[Product])
case class Product(name:String)
我想定义一个绑定到 Warehouse
类型的 table
class Warehouses(tag: Tag) extends Table[Warehouse](tag, "warehouses") {
def id = column[UUID]("id", O.PrimaryKey)
def name = column[String]("name")
def products = ???
}
我可以用元组定义我的 table 并从 Products
引用 Warehouses
- 这将是我需要的一对多关系。但是我需要我的表来反映我的域 classes 以便我可以执行 DBIO 操作并得到 Warehouse
而不是元组:
val warehouses = TableQuery[Warehouses]
db.run(warehouses.filter(_.id === 2).result.head) //this is of type Warehouse
如何根据包含集合的案例 class 定义模式?
Slick 不是 ORM
因此,Slick 不支持像 hibernate 这样的嵌套对象。如果您强烈希望嵌套对象模型 Slick 不是适合您用例的 suitable 解决方案。这一点在华而不实的文档中也有明确提及。
您在 Slick 中的用例是这样建模的
case class WarehouseModel(name:String, id: Long)
case class ProductModel(name:String, productId: Long)
case class WarehouseProductsModel(warehouseId: Long, productId: Long)
WarehouseProductsModel
捕获 Product 和 Warehouse
one-many
关系
请注意,上面的设计看起来像是在一对多关系的情况下人们会选择做的典型数据库设计。在 Slick 中,这些模型表示关系 tables。因此,对于每个 table,我们需要一个模型来表示代码中的 table。 Slick 有助于编写 sql 不可知、可组合、可重用、类型安全和 scala 集合之类的查询。因此,Slick 代码最终看起来像 Scala 集合操作代码。