【发布时间】: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