簡體   English   中英

如何在scala slick 3中實現枚舉?

[英]How to implement enums in scala slick 3?

這個問題已被提出並回答了光滑的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)
  )
}

但是,由於光滑1, MappedTypeMapper尚未可用,並且為光滑2提供的建議MappedColumnType不再可用,盡管這里有文檔記錄。

最新的最佳做法是什么?

MappedColumnType是什么意思不再可用? 它帶有通常的驅動程序導入。 使用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)
)

一個較短的答案,這樣您就不需要自己實現myEnumMapper

import play.api.libs.json.{Reads, Writes}

object MyEnum extends Enumeration {
  type MyEnum = Value
  val A, B, C = Value // if you want to use a,b,c instead, feel free to do it

  implicit val readsMyEnum = Reads.enumNameReads(MyEnum)
  implicit val writesMyEnum = Writes.enumNameWrites
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM