【发布时间】:2023-04-08 14:00:01
【问题描述】:
我正在使用带有 Play 框架和 Scala 的 Slick 3.0。
文档中提到了一对一映射,但我没有找到任何与多对多关系相关的解决方案
http://slick.lightbend.com/doc/3.0.0/orm-to-slick.html#mapping-configuration
会有临时表,所以我做了一个,但问题在于主类的投影,这是它的洞察力
食品类
case class FoodItem( id: Int, name : String,
description : String , price :Float ,
customization: Option[Seq[Customization] ]= None )
自定义类
case class Customization(id: Int, name : String, price : Float)
暂态表类
case class FoodItem_Customization(customization_id : Int , food_item_id : Int )
FoodItem 表
class FoodItemTable(tag: Tag) extends Table[FoodItem](tag, "FoodItem") {
def id = column[Int]("id", O.AutoInc, O.PrimaryKey)
def name = column[String]("name")
def description = column[String]("description")
def price = column[Float]("price")
def * = (id, name,description,price)
<> ((FoodItem.apply _).tupled, FoodItem.unapply _) //this where i have problem
}
当我运行程序时,Play 给了我错误
找不到匹配的形状。 Slick 不知道如何映射给定的类型。
可能的原因:Table[T] 中的 T 与您的 * 投影不匹配。或者您在查询中使用了不受支持的类型(例如 scala 列表)。
所需级别:slick.lifted.FlatShapeLevel
这是预期的,但如何解决?
我也检查了这个例子
https://github.com/ebiznext/slick-macros/wiki/2.-Quick-User-guide#many-to-many-relationship-mapping
但它适用于 slick 2 并且 Intellij 找不到符号 ~
所以这行不通
def * = id ~ name ~description ~ price
<> ((FoodItem.apply _).tupled, FoodItem.unapply _)
【问题讨论】:
标签: scala playframework-2.0 slick-3.0