使用Slick,我试图将数据库表项直接投影到它们表示的案例类。继example in the documentation,我设置成使用<>
操作映射的投影:将带有<>的映射投影映射到带有伴随对象的案例类别Slick
case class SomeEntity3(id: Int, entity1: Int, entity2: Int)
val SomeEntityTable = new Table[SomeEntity3]("some_entity_table") {
def id = column[Int]("id", O.PrimaryKey, O.AutoInc)
def entity1 = column[Int]("entity1")
def entity2 = column[Int]("entity2")
def * = id ~ entity1 ~ entity2 <> (SomeEntity3, SomeEntity3.unapply _)
}
现在,我想一些静态常量和辅助方法添加到SomeEntity3。为此,我创建了一个伴侣对象。但只要我包括线
object SomeEntity3
为*
说一些难以辨认的关于“重载方法值<>替代品”的定义,一个漂亮的野生多行错误弹出。
伴侣对象如何与Slick中的双向映射关联,并且可以以某种方式实现我的目标?
这并不工作,确实如此。任何关于拼写为什么明确应用的解释都是需要的,并在此解决问题? – notan3xit 2013-03-03 13:27:24
明确地将apply方法转换为函数(eta扩展)会产生'(Int,Int,Int)=> SomeEntity3',即伴随对象应该放在第一位的类型。更一般地说,将一个函数对象的apply方法转换成一个“新”函数对象产生与原始函数相同的类型。 – 2013-03-03 13:36:34
由于某些原因,当您有伴侣对象时,scalac会感到困惑,并且不会解除对象的应用。 – pedrofurla 2013-03-03 14:03:19