我有嵌套的类/对象,并希望使用 SLICK 在数据库中存储(和检索)它们。我知道使用 SLICK 映射投影将是关键。此外,我使用伴随对象在嵌套对象和平面结构之间进行映射(存储在 DB 表中)。我想做这样的事情(简化示例):
case class Foo(id: Int, myBar: Bar)
case class Bar(myInt: Int, myString: String)
object Foo {
def apply(id: Int, myInt: Int, myString: String): Foo = Foo(id, Bar(myInt, myString))
override def unapply(f: Foo) = (f.id, f.myBar.myInt, f.myBar.myString)
}
object TTable extends Table[Foo]("FOO") {
def id = column[Int]("id", O.PrimaryKey)
def myInt = column[Int]("myInt", O NotNull)
def myString = column[String]("myString", O NotNull)
def * = id ~ myInt ~ myString <> (Foo.apply _, Foo.unapply _)
def query(db: Database, id: Int): Option[Foo] = db withSession { //s: Session =>
(for { b <- TTable if b.id is id} yield b).firstOption
}
}
但是编译失败并出现几个错误:“方法 unapply 定义了两次”,“对重载定义的模糊引用,两个方法都应用 [...] 匹配预期类型?” 和“重载方法值 <> 与替代品”
我发现映射投影“我目前无法理解的 scala slick 方法”和“映射投影与 <> 到带有 Slick 中伴随对象的案例类”的出色解释,但建议的解决方案都不适合我。