0

我正在使用 Slick 3.1.0 和 Slick-pg 0.10.0。我有一个枚举:

object UserProviders extends Enumeration {
  type Provider = Value
  val Google, Facebook = Value
}

在测试用例之后,它可以很好地与列映射器一起使用,只需将以下implicit映射器添加到我的自定义驱动程序中。

implicit val userProviderMapper = createEnumJdbcType("UserProvider", UserProviders, quoteName = true)

但是,在使用纯 SQL 时,我遇到了以下编译错误:

could not find implicit value for parameter e: slick.jdbc.SetParameter[Option[models.UserProviders.Provider]]

我找不到任何关于此的文件。如何在 slick 中使用枚举编写普通 SQL?谢谢。

4

1 回答 1

1

您需要SetParameter[T]在范围内有一个隐式类型,它告诉 slick 如何从一些T它还不知道的自定义类型中设置参数。例如:

  implicit val setInstant: SetParameter[Instant] = SetParameter { (instant, pp) => 
    pp.setTimestamp(new Timestamp(instant.toEpochMilli))
  }

pp的类型是PositionedParameters

您可能还需要告诉 slick 如何将查询结果提取到一些T它还不知道的自定义类型中。为此,您需要一个隐式GetResult[T]范围。例如:

  implicit def getInstant(implicit get: GetResult[Long]): GetResult[Instant] = 
    get andThen (Instant.ofEpochMilli(_))
于 2015-10-20T02:54:01.580 回答