【问题标题】:Slick does not know how to map the given typesSlick 不知道如何映射给定的类型
【发布时间】:2016-12-17 05:18:43
【问题描述】:

下面是我的代码

package com.codemobile.box.modules.groups.repo.sql
import com.codemobile.box.core.services.DatabaseService
import com.codemobile.box.modules.groups.model.GroupEntity
trait GroupEntityTable {
  protected val databaseService: DatabaseService
  import databaseService.driver.api._
  class Groups(tag: Tag) extends Table[GroupEntity](tag, "groups"){
    val id = column[Int]("grp_id",O.PrimaryKey,O.AutoInc)
    val name = column[String]("grp_name")
    val permissions = column[String]("grp_permissions")
    def * = (id, name, permissions) <> (GroupEntity.tupled, GroupEntity.unapply)
  }

  protected val groupsTableQuery = TableQuery[Groups]

}


package com.codemobile.box.modules.groups.model
case class GroupEntity(id: Option[Int] = None, name: String, permissions : Option[String] = None)

但是,当我运行 activator run 时,我得到以下异常

[error] Slick does not know how to map the given types.
[error] Possible causes: T in Table[T] does not match your * projection. Or you use an unsupported type in a Query (e.g. scala List).
[error]   Required level: slick.lifted.FlatShapeLevel
[error]      Source type: (slick.lifted.Rep[String], slick.lifted.Rep[String], slick.lifted.Rep[Option[Int]])
[error]    Unpacked type: (Option[Int], String, Option[String])
[error]      Packed type: Any
[error]     def * = (name, permissions, id.?) <> (GroupEntity.tupled, GroupEntity.unapply)
[error]                                       ^
[error] one error found

【问题讨论】:

  • 错误与代码不符。

标签: scala slick


【解决方案1】:

只需将Option 添加到映射中的类型即可:

  class Groups(tag: Tag) extends Table[GroupEntity](tag, "groups"){
    val id = column[Option[Int]]("grp_id",O.PrimaryKey,O.AutoInc)
    val name = column[String]("grp_name")
    val permissions = column[Option[String]]("grp_permissions")
    def * = (id, name, permissions) <> (GroupEntity.tupled, GroupEntity.unapply)
  }

(请注意我如何将 column 更改为 id 和 permissions)

您也可以这样做:

  class Groups(tag: Tag) extends Table[GroupEntity](tag, "groups"){
    val id = column[Int]("grp_id",O.PrimaryKey,O.AutoInc)
    val name = column[String]("grp_name")
    val permissions = column[String]("grp_permissions")
    def * = (id.?, name, permissions.?) <> (GroupEntity.tupled, GroupEntity.unapply)
  }

(请注意我如何更改* 投影并在id 和permissions 之后添加?)

【讨论】:

    猜你喜欢
    • 2019-08-04
    • 2014-08-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多