Eri*_*ode 7 scala playframework-2.0 slick-2.0
在下面的代码中,我可以很好地插入我的记录.但我真的想要取回插入值的ID,以便我可以将对象作为响应的一部分返回.
def postEntry = DBAction { request =>
request.body.asJson.map {json =>
json.validate[(String, Long, String)].map {
case (name, age, lang) => {
implicit val session = request.dbSession
val something = Entries += Entry(None, name, age, lang)
Ok("Hello!!!: " + something)
}
}.recoverTotal {
e => BadRequest("Detected error: " + JsError.toFlatJson(e))
}
}.getOrElse {
BadRequest("Expecting Json data")
}
}
Run Code Online (Sandbox Code Playgroud)
所以我尝试将插入更改为:
val something = (Entries returning Entries.map(_.id)) += Entry(None, name, age, lang)
Run Code Online (Sandbox Code Playgroud)
但我得到以下异常:
SlickException: This DBMS allows only a single AutoInc column to be returned from an INSERT
Run Code Online (Sandbox Code Playgroud)
这里有一个注释:http://slick.typesafe.com/doc/2.1.0/queries.html
"请注意,许多数据库系统只允许返回一个列,该列必须是表的自动递增主键.如果要求其他列,则在运行时抛出SlickException(除非数据库实际支持它)."
但它没有说明如何只是请求ID列.
上面的Ende Nue给了我一个发现问题的提示.我需要在表定义中将列标记为主键和自动增量.
class Entries(tag: Tag) extends Table[Entry](tag, "entries") {
def id = column[Option[Long]]("id", O.PrimaryKey, O.AutoInc)
def name = column[String]("name")
def age = column[Long]("age")
def lang = column[String]("lang")
def * = (id, name, age, lang).shaped <> ((Entry.apply _)tupled, Entry.unapply _)
}
Run Code Online (Sandbox Code Playgroud)
O.PrimaryKey,O.AutoInc
| 归档时间: |
|
| 查看次数: |
2396 次 |
| 最近记录: |