Squeryl 0.9.6 版引入了一种新方法,通过使用KeyedEntityDef
typeclass来声明具有关联主键的类。仍然是旧的声明方式
import org.squeryl.KeyedEntity
case class Foo(id: Long, myField: String) extends KeyedEntity[Long]
支持。
我正在尝试将使用 Squeryl 0.9.5 的现有应用程序迁移到新版本,以使用自定义原始类型,但我正面临编译问题。这是一个不再编译的特征示例
trait Retrievable[A <: KeyedEntity[Long]] {
def table: Table[A]
def get(id: Long): Option[A] = inTransaction {
table.lookup(id)
}
}
它本来是这样使用的:
case class Foo(id: Long, myField: String) extends KeyedEntity[Long]
object Foo extends Retrievable[Foo] {
def table = DB.something
}
...
val foo = Foo.get(235)
现在,当我尝试编译时,我收到了消息
该方法需要在范围内隐含 org.squeryl.KeyedEntityDef[A, Long],或者它扩展了特征 KeyedEntity[{K}]
虽然A
确实延长了KeyedEntity[Long]
。甚至在范围内添加一个隐式,比如
trait Retrievable[A <: KeyedEntity[Long]] {
def table: Table[A]
implicit val ev: <:<[A, KeyedEntity[Long]]
def get(id: Long): Option[A] = inTransaction {
table.lookup(id)
}
}
对隐式解析没有帮助,并且特征无法编译。
有谁知道为什么编译器没有提供查找方法中的隐式?