【发布时间】:2017-01-07 20:14:03
【问题描述】:
有一种场景,requestType="HR"(来自 HTTP PUT 请求),它应该返回所有学生信息,但返回标题为“EMPLOYEE”
例如,考虑一个包含列 name、id 和 title 的“student”表
+-------+----+--------------------+
+ name | id | title +
+-------+----+--------------------+
| KING | 10 | SOFTWARE ENGINEER |
| BLAKE | 30 | SYSTEMS ENGINEER |
+-------+----+--------------------+
GOAL:返回所有学生,并覆盖 title="EMPLOYEE"
这是我目前所拥有的
case class Student(name: String, id: Long, title: String)
class StudentTable(tag: Tag) extends Table[Student](tag, "student") {
def name = column[String]("name")
def id = column[Long]("id")
def title = column[String]("title")
override def * = (name, id, title) <> ((Student.tupled, Student.unapply)
}
lazy val studentsQuery = TableQuery[StudentTable]
当我尝试映射和更改查询中的 title 值时,它抱怨“重新分配给 val”
val f = studentsQuery.map(p => p.title = "EMPLOYEE).result
编译器错误:重新分配给 val
方法二: 我尝试将requestType作为函数参数传入StudentTable,这样我就可以根据requestType修改title值。但是后来无法定义studentQuery,因为它抱怨“必需的标签”。
class StudentTable(tag: Tag)(reqType: String) extends Table[Student](tag, "student") {
def name = column[String]("name")
def id = column[Long]("id")
def title = req.type match {
case "HR" => "EMPLOYEE"
case _ => column[String]("title")
}
override def * = (name, id, title) <> ((Student.tupled, Student.unapply)
}
// Didn't understand how to provide tag
lazy val studentsQuery = TableQuery[StudentTable]()("HR")
编译错误:未指定值参数:缺点:(Tag) => StudentTable
【问题讨论】: