如何在Scala Slick中使用Enums?

Krz*_*ski 8 mysql enums scala playframework slick

想要将MySQL INT位掩码映射到Slick.

我发现了这个,但是如何使用它几乎没有问题

https://github.com/nafg/slick-additions/blob/master/src/main/scala/scala/slick/additions/Enum.scala

任何帮助我应该如何定义ie的对象

包含3个值的Enum的mysql列INT(3):让我们在这里命名为a,b,c.

Ash*_*ynd 9

我通过以下方式解决了Enums的问题(以您的值为例):

import play.api.db.slick.DB
import play.api.db.slick.Config.driver.simple._


sealed trait MyEnum
case object MyEnumA extends MyEnum
case object MyEnumB extends MyEnum
case object MyEnumC extends MyEnum

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)
  )
}

import MyEnumMapper._

case class MyData(
 ......
 enumValue: MyEnum,
 .....
)

................

object MyDataTable extends Table[MyData]("<table_name>") {
......
def enumValue = column[MyEnum]("<field_name>")
.....

.... /* whatever lifted or direct slick calls you want */ 
Run Code Online (Sandbox Code Playgroud)

}

如果适用于Play 2.1和Play 2.2,Slick 1.0.0和MariaDB 5.5(与MySQL相同)