【问题标题】:Scala, Play Framework Slick issue - could not find implicit value for parameter rconvScala,Play Framework Slick 问题 - 找不到参数 rconv 的隐式值
【发布时间】:2013-10-27 20:51:45
【问题描述】:

我遵循Slick documentation 的指导方针,但我不明白我在这里做错了什么:

package models

import scala.slick.session.Database
import Database.threadLocalSession
import scala.slick.jdbc.{GetResult, StaticQuery => Q}
import javax.sql.DataSource
import Q.interpolation

object Data {

    case class User(user: String, password: String)

    lazy val db = Database.forName("default")

    def result: Option[User] = {
        db.withSession {
            sql"SELECT user, password FROM user WHERE user = 'user' AND password = 'pass'".as[User]
        }
    }

}

线

sql"SELECT user, password FROM user WHERE user = 'user' AND password = 'pass'".as[User]

给我这个:

Multiple markers at this line
    - could not find implicit value for parameter rconv: scala.slick.jdbc.GetResult[models.Data.User]
    - could not find implicit value for parameter rconv: scala.slick.jdbc.GetResult[models.Data.User]

我在这里做错了什么?

播放框架 2.2.0、Scala 2.10.3、Slick 1.0.1

【问题讨论】:

    标签: scala playframework playframework-2.0 slick play-slick


    【解决方案1】:

    您需要提供从结果到用户的转换功能。直接从slick home复制和改编:

    implicit val getUserResult = GetResult(r => User(r.<<, r.<<))
    

    或您链接的文档中的this section

    【讨论】:

    • 但是这个转换函数应该存在哪里呢?在用户类中?在执行查询的函数中?别的地方?这是我从未见过的问题。此外,每次我尝试这个时,我都会收到“发散隐式扩展”错误
    • @EricHartford 在我的示例中,我将它放在Data 对象中,就在case class User 下方,不知道这是否有帮助。另外,请查看我关于同一主题的其他问题 - 我已经解决了大约六个问题。
    • 放在哪里并不重要,只要它在范围内。在某些情况下,Scala 会自动导入存在于伴生对象中的隐式,因此在User 伴生对象中可能是一个好地方。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-10-29
    • 1970-01-01
    • 2016-09-19
    • 1970-01-01
    • 2013-02-04
    • 2018-09-12
    • 2015-05-14
    相关资源
    最近更新 更多