使用 Slick 3.1 时使用 Plain SQL 枚举
Enum in Plain SQL when using Slick 3.1
我正在使用 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)
然而,当使用plain SQL时,我遇到了以下编译错误:
could not find implicit value for parameter e: slick.jdbc.SetParameter[Option[models.UserProviders.Provider]]
我找不到任何关于此的文档。我怎样才能用光滑的枚举写出普通的 SQL ?谢谢。
你需要在范围内有一个类型 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(_))
我正在使用 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)
然而,当使用plain SQL时,我遇到了以下编译错误:
could not find implicit value for parameter e: slick.jdbc.SetParameter[Option[models.UserProviders.Provider]]
我找不到任何关于此的文档。我怎样才能用光滑的枚举写出普通的 SQL ?谢谢。
你需要在范围内有一个类型 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(_))