Squeryl 0.9.6版引入了一種新方法來聲明具有關聯主鍵的類through the use of the KeyedEntityDef
typeclass。仍舊陳舊的方式Squeryl中的KeyedEntity 0.9.6
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,龍]在 範圍,或者說,它延伸性狀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?
謝謝。我試過你提到的兩種解決方案。至於第一個,'PrimitiveTypeMode._'已經存在,但沒有幫助。我認爲這與隱式'KeyedEntityDef [Long,_]'必須通過從隱式'ev:A <:
Andrea
'方法stringCanBuildFrom在類型=> scala.collection.generic.CanBuildFrom [String,Char,String]的對象Predef中使用方法 類型爲[A,K]的特徵QueryDsl中的kedForKeyedEntities(隱式ev:<:<[A,org.squeryl.KeyedEntity [K]],隱式m:Manifest [A])org.squeryl.KeyedEntityDef [A,K]匹配預計類型 forSome {type _ $ 1}' –
Andrea
我的錯,您的第二個解決方案正常工作。我沒有在'Retrievable'特徵的範圍內導入'KeyedEntityDef',但是錯誤消失在一長串錯誤消息中。 – Andrea