加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

scala – 如何坚持枚举值在光滑

发布时间:2020-12-16 09:47:36 所属栏目:安全 来源:网络整理
导读:我有以下枚举: object LoginStatus extends Enumeration() with BitmaskedEnumeration { type LoginStatus = Value val Active = Value("A") val Inactive = Value("I")} 我需要持久化枚举“A”的值,但是当生成sql时,结果为0。 这是表映射: object Login
我有以下枚举:

object LoginStatus extends Enumeration() with BitmaskedEnumeration {
  type LoginStatus = Value
  val Active = Value("A")
  val Inactive = Value("I")
}

我需要持久化枚举“A”的值,但是当生成sql时,结果为0。
这是表映射:

object LoginTable extends Table[Login]("login") {
  def idLogin = column[Int]("idlogin",O.PrimaryKey,O.AutoInc)
  def cdLogin = column[String]("cdlogin",O.NotNull)
  def cdPass = column[String]("cdPass",O.NotNull)
  def stLogin = column[LoginStatus]("stlogin",O.NotNull,O.DBType("character(1)"))
}

如何坚持枚举值?

我实现了

implicit val charMapper = MappedTypeMapper.base[Char,String](
    b => b.toString(),i => i.charAt(0))

  implicit def enum2StringMapper(enum: Enumeration) = MappedTypeMapper.base[enum.Value,Char](
    b => b.toString.charAt(0),i => enum.withName(i.toString))

  implicit val LoginStatusMapper = enum2StringMapper(LoginStatus)

但导致:

[error] c.Login - Invalid value for type int : A

解决方法

我个人建议让你自己的类继承自Scala的Enumeration类,因为那样你不必为每个枚举创建映射器,你最终使用:

这里是我目前使用的光滑2.0代码:

abstract class DBEnum extends Enumeration {

  import slick.jdbc.MappedJdbcType
  import slick.driver.JdbcDriver.simple._

  implicit val enumMapper = MappedJdbcType.base[Value,Int](_.id,this.apply)
}

这也应该在光滑的1.0(我没有测试它):

abstract class DBEnum extends Enumeration {
  implicit val enumMapper = MappedTypeMapper.base[Value,this.apply)
}

现在你需要的所有你的枚举只是继承DBEnum,它应该减少了很多锅炉板。

如果要使用字符串值而不是Ints,请相应地编辑代码。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读