Scala Quill 长时间找不到隐式编码器

Scala Quill can't find implicit encoder for long

以下代码按预期工作(笔记本电脑是一个案例class):

def main(args: Array[String]): 

 implicit val ctx = new SqlMirrorContext(MirrorSqlDialect, Literal)
 import ctx._

 val laptops = quote {
   querySchema[Laptop]("laptops")
 }

 implicit val laptopInsertMeta = insertMeta[Laptop](_.id)

 val q = quote {
   laptops.insert(lift(Laptop(...)))
 }
 ctx.run(q)

}

但是这个(正在重构的)版本无法编译:

class LaptopDaoQuill[I <: Idiom, N <: NamingStrategy](implicit ctx: Context[I, N])  {

 import ctx._

 def insert(obj: Laptop) = {
 val laptops = quote {
   querySchema[Laptop]("laptops")
 }
 implicit val personInsertMeta = insertMeta[Laptop](_.id)

 val q = quote {
    laptops.insert(lift(obj))
 }
 ctx.run(q)
 }
}

object Main {
def main(args: Array[String]): Unit = {
  implicit val ctx = new SqlMirrorContext(MirrorSqlDialect, Literal)

  val laptopDao = new LaptopDaoQuill

  laptopDao.insert(Laptop(...))
}

有以下错误:

错误:(29, 55) 找不到隐式 Encoder[Long]。请执行以下操作之一: 1. 确保提供隐式 Encoder[Long] 并且没有其他冲突的隐式; 2. 将 Long Embedded 设为 class 或 AnyVal。 隐式 val personInsertMeta = insertMetaLaptop

错误:(32, 21) 找不到类型 com.training.entity.Laptop 的隐式 InsertMeta laptops.insert(电梯(obj))

在那种情况下会起作用(确保在 main 中使用 PostgresJdbcContext):

class LaptopDaoQuill[N <: NamingStrategy : TypeTag](implicit ctx: PostgresJdbcContext[N]) {...}

但如果 :

class LaptopDaoQuill[I <: Idiom : TypeTag, N <: NamingStrategy: TypeTag](implicit ctx: Context[I, N])

提前致谢!

I <: Idiom 替换为 I <: SqlIdiom,将 implicit ctx: Context[I, N] 替换为 implicit ctx: JdbcContext[I, N]

编译以下代码:

import io.getquill._
import io.getquill.context.jdbc.JdbcContext
import io.getquill.context.sql.idiom.SqlIdiom

case class Laptop(id: Long, name: String)

class LaptopDaoQuill[I <: SqlIdiom, N <: NamingStrategy](implicit ctx: JdbcContext[I, N]) {

  import ctx._

  def insert(obj: Laptop) = {
    val laptops = quote {
      querySchema[Laptop]("laptops")
    }
    implicit val personInsertMeta = insertMeta[Laptop](_.id)

    val q = quote {
      laptops.insert(lift(obj))
    }
    ctx.run(q)
  }
}

object Main {
  def main(args: Array[String]): Unit = {
//    implicit val ctx = new SqlMirrorContext(MirrorSqlDialect, Literal)
    implicit val ctx = new PostgresJdbcContext(SnakeCase, "ctx")

    val laptopDao = new LaptopDaoQuill

    laptopDao.insert(Laptop(10L, "laptop"))
  }
}