使用Slick 3.1时,在纯SQL中枚举

时间:2015-10-19 08:50:15

标签: postgresql slick slick-pg

我使用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]]

我找不到任何关于此的文件。如何在光滑的情况下用枚举编写纯SQL?感谢。

1 个答案:

答案 0 :(得分:0)

你需要在范围内隐含类型SetParameter[T],它告诉我们如何设置一些它不知道的自定义类型T的参数。例如:

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

pp的类型是PositionedParameters

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

  implicit def getInstant(implicit get: GetResult[Long]): GetResult[Instant] = 
    get andThen (Instant.ofEpochMilli(_))