Sim*_*mon 6 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]]
Run Code Online (Sandbox Code Playgroud)
我的案例类看起来像
final case class GaClientId(ip: String, userId: Option[UUID], clientId: String)
Run Code Online (Sandbox Code Playgroud)
我的查询是这样的:
db.run(       
  sql"""
    INSERT INTO ga_client_id(ip, user_id, clientId) VALUES (
    ${gaClientId.ip}, ${gaClientId.userId}, $gaClientId.userId.orNull)
    ON CONFLICT DO NOTHING;""")
Run Code Online (Sandbox Code Playgroud)
我尝试添加这个:
implicit val getUUIDContent: GetResult[GaClientId] =
  GetResult(r => GaClientId(r.<<, r.nextStringOption().map(UUID.fromString), r.<<))
Run Code Online (Sandbox Code Playgroud)
但没有结果。
我怎样才能做到这一点?
由于错误暗示您应该指定SetParameternot GetParameter。应该是这样的:
  implicit val uuidSetter = SetParameter[Option[UUID]] {
    case (Some(uuid), params) => params.setString(uuid.toString)
    case (None, params) => params.setNull(Types.VARCHAR)
  }
Run Code Online (Sandbox Code Playgroud)
然后你可能应该添加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)
Run Code Online (Sandbox Code Playgroud)
        |   归档时间:  |  
           
  |  
        
|   查看次数:  |  
           5401 次  |  
        
|   最近记录:  |