2016-12-16 56 views
0

下面是我的代码油滑不知道如何映射给定类型

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 
+0

错误后添加?不匹配的代码。 – pedrofurla

回答

2

就在映射添加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) 
    } 

(注意我是如何改变columnidpermissions

或者你可以这样做:

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) 
    } 

(注意我是如何改变*投影和idpermissions

+0

感谢您的解决方案 – osleonard