Как использовать Enums в Scala Slick?

Хотите сопоставить битовую маску MySQL INT с Slick.

Я нашел это, но у меня есть небольшая проблема, как его использовать

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

Любая помощь, как мне определить объект для i.e.

Столбец mysql INT (3) с Enum, содержащим 3 значения: давайте назовем их здесь a, b, c.


person Krzysztof Kowalski    schedule 11.09.2013    source источник
comment
связанные с stackoverflow.com/questions /19273805/   -  person cvogt    schedule 13.10.2013


Ответы (1)


Я решил проблему с 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 */ 

}

Если у меня работает как в Play 2.1, так и в Play 2.2, Slick 1.0.0 и MariaDB 5.5 (так же, как MySQL)

person Ashalynd    schedule 09.10.2013
comment
Кстати, MappedTypeMapper не существует. Он переименован в MappedColumnType. Вот обсуждение: groups.google.com/forum/#!msg/ scalaquery/4Ns_J_8wbqQ/ - person Sayat Satybald; 01.08.2014
comment
Да, теперь он переименован. Этот ответ был сделан, когда Slick 1 все еще был текущей версией :) - person Ashalynd; 01.08.2014