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

scala – 光滑表定义中的自定义映射列类型

发布时间:2020-12-16 09:53:37 所属栏目:安全 来源:网络整理
导读:我有一个枚举类型ResourceType,我试图使用光滑的API将其作为Int存储在数据库中.我已经为ResourceType定义了一个自定义类型映射器,但是在我的表定义中我得到了一个编译器错误,说明“找不到匹配的形状.Slick不知道如何映射给定的类型.”.是否有可能使这项工作
我有一个枚举类型ResourceType,我试图使用光滑的API将其作为Int存储在数据库中.我已经为ResourceType定义了一个自定义类型映射器,但是在我的表定义中我得到了一个编译器错误,说明“找不到匹配的形状.Slick不知道如何映射给定的类型.”.是否有可能使这项工作?

import scala.slick.driver.H2Driver.simple._

case class Resource(val id : Option[Int],val creationDate : Date,val title : String,val resourceType : ResourceType,val description : String) {
}

case class ResourceType private(val databaseCode : Int,val label : String) {
}

object ResourceType {
  val lessonPlan = new ResourceType(1,"Lesson Plan")
  val activity = new ResourceType(2,"Activity")

  val all = scala.collection.immutable.Seq(lessonPlan,activity)

  private val _databaseCodeMap = all.map(t => t.databaseCode -> t).toMap

  def apply(databaseCode : Int) = _databaseCodeMap(databaseCode)
}

class ResourceTable(tag : Tag) extends Table[Resource](tag,"Resource") {
  def id = column[Option[Int]]("ID",O.PrimaryKey,O.AutoInc)
  def creationDate = column[Date]("CreationDate")
  def title = column[String]("Title")
  def resourceType = column[Int]("ResourceType")
  def description = column[String]("Description")

  implicit val resourceTypeTypeMapper = MappedColumnType.base[ResourceType,Int](_.databaseCode,ResourceType(_))

  //Compile error on this line
  def * = (id,creationDate,title,resourceType,description) <> (Resource.tupled,Resource.unapply)
}

解决方法

resourceType列需要具有ResourceType类型.所以试试吧

def resourceType = column[ResourceType]("ResourceType")

您可能必须在列定义上方隐式移动类型映射器.

(编辑:李大同)

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

    推荐文章
      热点阅读