Squeryl 0.9.6中的KeyedEntity

时间:2012-12-18 17:51:26

标签: scala implicit-conversion squeryl

Squeryl的0.9.6版引入了一种新方法来声明具有关联主键through the use of the 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] in   范围,或者它扩展了特征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)
  }
}

无助于隐式解析,并且特征无法编译。

  

有没有人知道为什么编译器没有提供lookup method中隐含的内容?

0 个答案:

没有答案