我有以下案例类:
case class User (id: Option[Long] = None, name: String = "", lastName: String = "", login: String = "", password: String = "")
和下表介绍:
class Users(tag: Tag) extends Table[User](tag,"t_users"){
def id = column[Option[Long]]("id", O.PrimaryKey, O.AutoInc)
def name = column[String]("name")
def lastName = column[String]("lastName")
def login = column[String]("login", O.NotNull)
def password = column[String]("password")
def * = (id, name, lastName, login, password) <> ((User.apply _).tupled, User.unapply _)
}
我想执行查询,该查询会列出一些&#34;用户&#34;但没有密码。
我可以这样做:
def list(page: Int = 0, pageSize: Int = 10, filter: String = "%")(implicit s: Session): Page[User] = {
val offset = pageSize * (page -1)
val query = (for {
u <- users
if u.name.toLowerCase like filter.toLowerCase()
} yield u)
query.drop(offset).take(pageSize)
val totalRows = count(s)
val result = query.list
Page(result,page,offset,totalRows)
}
这会让我的用户满满的,但我想表现出这样的收益:
yield User(u.id,u.name,u.lastName,u.login) // bound to a User
有可能吗?
修改
我可以通过以下方式接受收益:
yield User(u.id.asInstanceOf[Option[Long]],u.name.asInstanceOf[String],u.lastName.asInstanceOf[String],u.login.asInstanceOf[String],""))
但现在它给我一个错误
u <- users
话说:
找不到匹配的形状。 Slick不知道如何映射给定的类型。可能的原因:表[T]中的T与您的*投影不匹配。或者您在查询中使用不受支持的类型(例如scala列表)。所需级别:scala#23.slick#2774.lifted#19028.FlatShapeLevel#24408来源类型:型号#29.User#17383未包装类型:T#10265565包装类型:G#10265564
方法地图#59065没有足够的参数:(隐式形状#10265576:scala#23.slick#2774.lifted#19028.Shape#24129 [_&lt;:scala#23.slick#2774.lifted #19028.FlatShapeLevel#24408,型号#29.User#17383,T#10265565,G#10265564])scala#23.slick#2774.lifted#19028.Query#23982 [G#10265564,T#10265565,Seq# 3031。未指定的值参数形状。
答案 0 :(得分:0)
我不确定这一点,但您可以尝试:
val query = (for {
u <- users
if u.name.toLowerCase like filter.toLowerCase()
} yield u.copy(password = ""))