【问题标题】:Scala Slick: Query using direct embedding doesn't workScala Slick:使用直接嵌入的查询不起作用
【发布时间】:2012-10-29 07:26:46
【问题描述】:

我使用以下代码从 mysql 表中请求项目(Account 类只是一个表示数据库字段的案例类)

val res = Queryable[Account].map(_.name)

val db = Database.forURL("jdbc:mysql://localhost:3306/databasename", driver = "com.mysql.jdbc.Driver", user="username", password="password")
val backend = new SlickBackend(MySQLDriver, AnnotationMapper)

db withSession {
  val r=backend.toList(res)
  println(r.toString)
}

线

val r=backend.toList(res)

抛出以下异常:

[ToolBoxError: reflective typecheck has failed: ambiguous implicit values: both value StringCanBuildFrom in object Predef of type => scala.collection.generic.CanBuildFrom[String,Char,String] and method conforms in object Predef of type [A]=> <:<[A,A] match expected type T] 

这可能是什么原因?我正在使用 Scala 2.10.0-RC1 和 Slick 0.11.2。

Account 类如下所示:

@table("account")
case class Account (
    @column("ID") id: Long,
    ...
    @column("Name") name: String,
    ...
)

【问题讨论】:

  • 不确定,但试试“db.withSession {...”
  • 没有区别 :(
  • 不熟悉slick,但是这个toList方法是什么?你不能明确告诉编译器你期待一个 List[Account] 吗?在 ScalaQuery 上,我执行 list[Foo](someQuery) 之类的操作,其中 list 是一个辅助方法,它在查询中调用 SQ 的 list 方法并强制转换为给定的 T。不是类型安全但非常方便....
  • 对 slick 也不熟悉。 SlickBackend.toList 是我发现的一种实际执行查询的方式。类型推断器告诉我 r 是 List[String] 类型,正如我所期望的那样。
  • 好吧,错误就是线索,给编译器一个帮助并明确指定类型。

标签: mysql scala orm scalaquery slick


【解决方案1】:

这意味着类型与 mysql 类型不匹配。即 id 应该是 Int 而不是 Long。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-12-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多