Play Slick 2.1.0这个DBMS只允许从INSERT返回一个AutoInc列



在下面的代码中,我可以很好地插入我的记录。但我真的很想取回插入值的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")
  }
}

所以我试着把插入改成:

 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

"请注意,许多数据库系统只允许返回一列,该列必须是表的自动递增主键。如果您要求其他列,则在运行时会引发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 _)
}

O.PrimaryKey,O.AutoInc

最新更新