在下面的代码中,我可以插入我的记录。但我真的很想取回插入值的ID,这样我就可以返回对象作为我的响应的一部分。Play Slick 2.1.0这个DBMS只允许从INSERT中返回一个AutoInc列
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")
}
}
所以我试图改变插入到:
val something = (Entries returning Entries.map(_.id)) += Entry(None, name, age, lang)
,但我得到以下异常:
SlickException: This DBMS allows only a single AutoInc column to be returned from an INSERT
有一个关于它记在这里:http://slick.typesafe.com/doc/2.1.0/queries.html
“请注意,许多数据库系统只允许返回一列,它必须是表格的au增加主键。如果你问其他列的SlickException在运行时抛出(除非该数据库实际上支持的话)。”
但它并没有说怎么刚申请的ID列。
不'Entries'有主键?我不瘦k你的'id'列是唯一的,你将'None'传递给'Entry',这让我认为它是可选的。 – 2014-08-29 21:35:24
谢谢!你让我想起了我的映射,我回去检查了一下。我设法回滚我的主键def和自动递增def在Table映射上。 – 2014-08-29 22:01:04
不客气。 – 2014-08-29 22:09:46