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") 您可能必须在列定义上方隐式移动类型映射器. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |