Slick:找不到参数e的隐含值:slick.jdbc.SetParameter [Option [java.util.UUID]]

时间:2017-02-20 10:21:06

标签: postgresql scala slick

我和Play一起工作! 2.5,Slick 3和PostgreSQL 9.6。

我尝试使用带有可选SQL的简单普通UUID查询,但我收到此错误:

Slick: could not find implicit value for parameter e: slick.jdbc.SetParameter[Option[java.util.UUID]]

我的案例类似乎是

final case class GaClientId(ip: String, userId: Option[UUID], clientId: String)

我的查询是这样的:

db.run(       
  sql"""
    INSERT INTO ga_client_id(ip, user_id, clientId) VALUES (
    ${gaClientId.ip}, ${gaClientId.userId}, $gaClientId.userId.orNull)
    ON CONFLICT DO NOTHING;""")

我试着添加这个:

implicit val getUUIDContent: GetResult[GaClientId] =
  GetResult(r => GaClientId(r.<<, r.nextStringOption().map(UUID.fromString), r.<<))

但没有结果。

我该怎么做?

1 个答案:

答案 0 :(得分:1)

如错误所示,您应指定SetParameter而不是GetParameter。它应该如下:

  implicit val uuidSetter = SetParameter[Option[UUID]] {
    case (Some(uuid), params) => params.setString(uuid.toString)
    case (None, params) => params.setNull(Types.VARCHAR)
  }

然后您应该将asUpdate添加到您的更新SQL

  db.run((sql"""
      INSERT INTO ga_client_id(ip, user_id, clientId) VALUES (
      ${gaClientId.ip}, ${gaClientId.userId}, ${gaClientId.clientId})
      ON CONFLICT DO NOTHING;
  """).asUpdate)