2014-08-29 4 views
5

Im folgenden Code kann ich meine Datensätze einfach einfügen. Aber ich möchte wirklich die ID des eingefügten Wertes zurückbekommen, damit ich das Objekt als Teil meiner Antwort zurückgeben kann.Play Slick 2.1.0 Dieses DBMS erlaubt nur eine einzige AutoInc-Spalte von einem INSERT zurückgegeben werden

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") 
    } 
} 

Also habe ich versucht, den Einsatz zu ändern:

val something = (Entries returning Entries.map(_.id)) += Entry(None, name, age, lang) 

Aber ich bekomme die folgende Ausnahme:

SlickException: This DBMS allows only a single AutoInc column to be returned from an INSERT 

Es gibt eine Notiz hier: http://slick.typesafe.com/doc/2.1.0/queries.html

" Beachten Sie, dass viele Datenbanksysteme nur eine einzelne Spalte zurückgeben können, die das Au der Tabelle sein muss Inkrementieren des Primärschlüssels. Wenn Sie für andere Spalten ein SlickException fragen wird zur Laufzeit geworfen (es sei denn, die Datenbank tatsächlich unterstützt).“

Aber es sagt nicht, wie nur die ID-Spalte anfordern.

+0

nicht 'Entries' a haben Primärschlüssel? Ich bin nicht dünn k Ihre ID-Spalte ist diejenige, in der Sie "None" an "Entry" übergeben, was mich zu der Annahme bringt, dass es optional ist. –

+0

Danke! Du hast mich zum Nachdenken gebracht und ich bin zurückgegangen und habe es überprüft. Ich habe es geschafft, mein Primärschlüsseldef und Auto-Inkrementdef in der Tabellenzuordnung zurückzusetzen. –

+0

Gern geschehen. –

Antwort

7

Ende Nue oben gab mir die Hinweis das Problem zu finden. ich brauchte die Spalte markiert Primärschlüssel und auto-Inkrement in der Tabellendefinition haben.

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

+0

Das löst mein Problem immer noch nicht. Hat diese Lösung den Fehler für Sie behoben? – Maverick

+0

Dies ist ein besserer Überblick über das Problem https://github.com/slick/slick/issues/1561 –