假设我有如下案例类:
case class Warehouse(name:String, products:Seq[Product])
case class Product(name:String)
我想定义一个绑定(bind)到
Warehouse
的表类型class Warehouses(tag: Tag) extends Table[Warehouse](tag, "warehouses") {
def id = column[UUID]("id", O.PrimaryKey)
def name = column[String]("name")
def products = ???
}
我可以用元组定义我的表并引用
Warehouses
来自 Products
- 那将是我需要的一对多关系。但是我需要我的表来反射(reflect)我的域类,以便我可以执行 DBIO 操作并获取 Warehouse
不是元组:val warehouses = TableQuery[Warehouses]
db.run(warehouses.filter(_.id === 2).result.head) //this is of type Warehouse
如何从包含集合的案例类中定义模式?
最佳答案
Slick 不是 ORM
所以,Slick 不支持像 hibernate 这样的嵌套对象。如果您强烈希望拥有嵌套对象模型,则 Slick 不适合您的用例。这一点在 slick 文档中也明确提到。
您在 Slick 中的用例是这样建模的
case class WarehouseModel(name:String, id: Long)
case class ProductModel(name:String, productId: Long)
case class WarehouseProductsModel(warehouseId: Long, productId: Long)
WarehouseProductsModel
捕获 one-many
产品与仓库的关系请注意,上述设计看起来像是在一对多关系的情况下会选择执行的典型数据库设计。在 Slick 中,这些模型代表关系表。因此,对于每个表,我们需要有一个模型在代码中表示该表。 Slick 有助于编写 sql 不可知的、可组合的、可重用的、类型安全的和 scala 集合之类的查询。所以一天结束时,Slick 代码看起来像 Scala 集合操作代码。
关于scala - Slick - 一对多表模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40390439/