Slick 不知道如何映射给定的类型
Slick does not know how to map the given types
下面是我的代码
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)
但是当我 运行 激活器 运行 我得到低于异常
[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
只需将 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
之后添加 ?
)
下面是我的代码
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)
但是当我 运行 激活器 运行 我得到低于异常
[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
只需将 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
之后添加 ?
)