Diese Frage ist glatt 3.0 oder 3.1 (Ich bin flexibel darüber)Scala + Slick 3: Einfügen das Ergebnis einer Abfrage in eine andere Tabelle
Ich habe eine Zwischenabfrage, die ich mit map
verarbeiten, for
, etc um das gewünschte Ergebnis zu erhalten. Am Ende habe ich eine
val foo: DBIOAction[Seq[MySchema.Bar], NoStream, Effect.Read]
Jetzt habe ich ein val bar: TableQuery[MySchema.Bar]
und ich möchte foo, um es einzufügen.
Wenn foo wäre ein Seq
Ich könnte einfach tun bar ++= foo
, aber es ist nicht.
Die einzige Möglichkeit, die ich gefunden habe, ist das Ergebnis materialisieren, indem Sie darauf warten. Gefallen Sie diesen
val query = (bar ++= Await.result(db.run(foo), Duration.Inf))
Offensichtlich brauchen query
mit db.run
an einem gewissen Punkt ausgeführt werden. Aber jetzt habe ich zwei DB-Läufe. Wäre es nicht besser, alles in einem Durchgang zu haben?
Gibt es einen besseren Weg, dies zu tun?
'bar + = foo'? Aber du müsstest es immer noch 'db.run', egal ob es' + = 'oder' ++ = '... (?) Ist – kornfridge
Ich denke ++ = mit Nebenwirkungen war die slick2 api, während die slick3 ist mehr funktional, also müssen Sie explizit eine 'db.run' ausführen. – kornfridge
Ja, das Ergebnis von ++ = ist jetzt eine Abfrage, die ausgeführt werden muss. Ich habe die Frage in diesem Punkt bearbeitet. Aber ich muss zwei db.run Aufrufe für diese Aufgabe tun. – masgo