如何在scala slick 3中实现枚举?

kba*_*man 11 database enums scala slick

这个问题已被提出并回答了光滑的1和2,但答案似乎对光滑3无效.

试图在Scala Slick如何使用Enums中的模式,

object MyEnumMapper {
  val string_enum_mapping:Map[String,MyEnum] = Map(
     "a" -> MyEnumA,
     "b" -> MyEnumB,
     "c" -> MyEnumC
  )
  val enum_string_mapping:Map[MyEnum,String] = string_enum_mapping.map(_.swap)
  implicit val myEnumStringMapper = MappedTypeMapper.base[MyEnum,String](
    e => enum_string_mapping(e),
    s => string_enum_mapping(s)
  )
}
Run Code Online (Sandbox Code Playgroud)

但是MappedTypeMapper从光滑1开始就没有可用,并且MappedColumnType光滑2 的建议不再可用,尽管这里有记录.

最新的最佳做法是什么?

Rom*_*man 13

你的意思MappedColumnType是什么不再可用?它带有通常的驱动程序导入.使用enum将字符串映射到字符串MappedColumnType非常简单:

object MyEnum extends Enumeration {
  type MyEnum = Value
  val A = Value("a")
  val B = Value("b")
  val C = Value("c")
}

implicit val myEnumMapper = MappedColumnType.base[MyEnum, String](
  e => e.toString,
  s => MyEnum.withName(s)
)
Run Code Online (Sandbox Code Playgroud)

  • @CedricReichenbach这只是一个例子。您可以将其放置在任意位置,只需在需要时确保它在编译器范围内即可。 (2认同)