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

标签 scala 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")

您可能需要将类型映射器隐式移动到列定义之上。

关于scala - 光滑表定义中的自定义映射列类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21237224/

相关文章:

scala - SBT 多项目设置,其中子项目构建文件依赖于非托管 JAR

scala - 了解 'type' 关键字在 Scala 中的作用

scala - 我的 logback.xml 和 Akka 有什么问题?

scala - 是否可以在 Slick 查询模板中使用 List 或 Set 类型的参数? (提升API)

scala - 值 mkString 不是 org.apache.spark.rdd.RDD[Int] 的值

java - 重载方法值 ofDim 与 scala 中的替代方案

sql - 将 Slick SQL 查询结果映射到案例类

scala - 如何集成Play(Web框架)、Deadbolt(授权)和Slick(数据库访问)

postgresql - 使用 PostgreSQL 时的棘手问题

playframework - 私有(private)值 dbConfig 作为类型 Repository.this.dbConfig.driver.api.Query[T,E,S] 的一部分转义其定义范围