我正在使用带有Scala的Play框架的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
}
当我运行程序时播放给我错误
找不到匹配的形状。 Slick不知道如何映射给定的类型。
可能的原因:表[T]中的T与您的*投影不匹配。或者您在查询中使用不受支持的类型(例如scala列表)。
所需级别:slick.lifted.FlatShapeLevel
预计会有哪些但是如何解决?
我也检查了这个例子
https://github.com/ebiznext/slick-macros/wiki/2.-Quick-User-guide#many-to-many-relationship-mapping
但它适用于光滑2和Intellij找不到符号〜
所以这不起作用
def * = id ~ name ~description ~ price
<> ((FoodItem.apply _).tupled, FoodItem.unapply _)
答案 0 :(得分:1)
它会导致错误,因为FoodItem类有customization
字段而FoodItemTable类没有它;这是不匹配的。
您需要定义每个表类和映射对象。
此页面有一个很好的例子。 http://olivebh.com/scala-play-slick.html