Scala Play Slick 2.1.0此DBMS仅允许从INSERT返回单个AutoInc列

Scala Play Slick 2.1.0此DBMS仅允许从INSERT返回单个AutoInc列,scala,playframework-2.0,slick-2.0,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 = r

在下面的代码中,我可以很好地插入记录。但是我真的希望返回插入值的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
这里有一个关于它的注释:

“请注意,许多数据库系统只允许返回一列,该列必须是表的自动递增主键。如果您请求其他列,则会在运行时引发异常(除非数据库实际支持该列)。”


但它没有说明如何只请求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 _)
}
类条目(tag:tag)扩展表[Entry](tag,“Entries”){
def id=列[Option[Long]](“id”,O.PrimaryKey,O.AutoInc)
def名称=列[字符串](“名称”)
def age=列[Long](“age”)
def lang=列[字符串](“lang”)
def*=(id、姓名、年龄、语言).shaped((Entry.apply _)元组,Entry.unapply _)
}

O.PrimaryKey,O.AutoInc

条目没有主键吗?我不认为您的
id
列是唯一的,您正在将
None
传递到
Entry
中,这使我认为它是可选的。谢谢!你让我想到了我的地图,我回去检查了一下。我成功地回滚了表映射上的主键定义和自动增量定义。这仍然不能解决我的问题。此解决方案是否为您修复了错误?这是一个更好的问题概述