Scala:oraclejdbc通用与Quill
我试图将广义类作为参数传递。如果我给出Case类和值,那么它工作得很好。但是,我想让它通用Scala:oraclejdbc通用与Quill,scala,quill,Scala,Quill,我试图将广义类作为参数传递。如果我给出Case类和值,那么它工作得很好。但是,我想让它通用 class DB[T] { lazy val ctx = new OracleJdbcContext(SnakeCase, "ctx") import ctx._ def insert(input: T) = { val q = quote { query[T].insert(lift(input)) } ctx.run(q) } } 我得到的
class DB[T] {
lazy val ctx = new OracleJdbcContext(SnakeCase, "ctx")
import ctx._
def insert(input: T) = {
val q = quote {
query[T].insert(lift(input))
}
ctx.run(q)
}
}
我得到的错误是::
“找不到类型t
找不到类型“t”的编码器。请注意,编码器是不变的
但是,如果我给出了实际的类名,那么它运行得很好
case class Location(street:String,pinCode:Int)
class DB {
lazy val ctx = new OracleJdbcContext(SnakeCase, "ctx")
import ctx._
val q = quote {
query[Location].insert(Location("2ndcross",500001))
}
ctx.run(q)
}
您需要在作用域中具有
SchemaMeta[T]
,才能使用此类型执行查询。虚拟解决方案是像这样要求它作为参数约束(以及隐式类参数)
class DB[T: SchemaMeta]
但这是行不通的,因为提供这些实例的是ctx
我相信您需要遵循以下示例:
但即便如此,你想要的也可能无法实现
使用quill时需要了解的重要一点是,几乎所有的东西都是基于宏的,如果你把东西抽象出来,那么就没有足够的信息让这些宏发挥作用。因此,您要么需要复制需要宏的代码,要么在自己的宏中包装泛型代码