我似乎可以从原始SQL查询中获取如何返回列表[用户]。
implicit val getUserResult = GetResult(r => User(r.nextInt, ....))
sql"""
select * from users where id =1
""".as[User]
这似乎编译良好,但是如果我更改它以返回列表而不是单个结果,则会出错。
.as[List[User]]
错误:
could not find implicit value for parameter rconv: scala.slick.jdbc.GetResult[List[User]]
如何更改隐式GetResult以返回列表?
更新
所以我创建了隐式的像:
隐式val getUserResult = GetResult(r => User(r.nextInt,....))
val查询:StaticQuery0 [用户] = sql“ .....”
query.list()
我可以看到这个错误:
[PSQLException: Bad value for type int : asdf asdfs]
在psql中,我可以看到某些列中有“ asdf asdfs”,但没有INT列。如果一切正常,我不确定为什么会收到此错误,看起来像个错误?
import scala.slick.driver.JdbcDriver.backend.Database
import Database.dynamicSession
import scala.slick.jdbc.{GetResult, StaticQuery => Q}
import Q.interpolation
val t: StaticQuery0[User] =
sql"select * from users where id = 1".as[User]
val list: List[User] = t.list()
[StaticQuery
具有所有常用方法,例如list
,first
,firstOption
等,因为它们是从Invoker
特性继承的。如果要使用自定义案例类并使用
GetResult
:
case class User(id: Int, name: String) implicit val getUserResult = GetResult(r => User(r.nextInt, r.nextString)) val t: StaticQuery0[User] = sql"select * from adwords_ads where name = ".as[User] val list: List[User] = t.list()
编辑:即使没有隐式映射器,它也对我有用,因为光滑的模式生成器已经为我生成了一个:
/** GetResult implicit for fetching SalesforceLogRow objects using plain SQL queries */ implicit def GetResultSalesforceLogRow(implicit e0: GR[Long], e1: GR[String], e2: GR[Int], e3: GR[java.sql.Timestamp], e4: GR[Option[java.sql.Timestamp]]): GR[myEntity] = GR { prs => import prs._ myEntity.tupled((<<[Long], <<[Long], <<[String], <<[Int], <<[java.sql.Timestamp], <<[Long], <<?[java.sql.Timestamp])) }
我通常在模式对象中拥有它,显然您没有它,而Slick不知道如何映射您的普通SQL。