ps0*_*604 1 scala slick slick-3.0
在这个 Slick 函数中,我从 User 表中读取并返回一个 SessionUser 对象(SessionUser 的列比 User 少)。
问题是这段代码无法编译,对于 SessionUser 中的每个字段,它都会给我错误type mismatch; found : slick.lifted.Rep[String] required: String。此错误的含义是什么以及如何修复它?
def readByUserid (userid: String) : Option[SessionUser] = {
val db = Database.forConfig(Constant.dbBank)
try {
val users = TableQuery[UserDB]
val action = users.filter(_.userid === userid)
.map(u => SessionUser(u.userid, u.firstName, u.lastName)).result
val future = db.run(action)
val result = Await.result(future, Duration.Inf)
result
}
finally db.close
}
Run Code Online (Sandbox Code Playgroud)
您map在错误的地方使用了操作:Query对象上的映射相当于SELECTSQL中的语句。您应该map在result调用之后立即进行操作:
val action = users.filter(_.userid === userid).result.map(_.headOption.map(u => SessionUser(u.userid, u.firstName, u.lastName)))
Run Code Online (Sandbox Code Playgroud)
由于我们只使用users表中的三列,我们可以通过map对Query对象使用操作来表达这一点。这样底层的 SQL 语句将只选择我们需要的列:
val action = users.filter(_.userid === userid).map(u => (u.userid, u.firstName, u.lastName)).result.map(_.headOption.map {
case (userid, firstName, lastName) => SessionUser(userid, firstName, lastName)
})
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3304 次 |
| 最近记录: |