我和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.<<))
但没有结果。
我该怎么做?
答案 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)