Questa domanda è di circa chiazza di petrolio 3.0 o 3.1 (io sono flessibile, a tale proposito)Scala + Slick 3: Inserimento il risultato di una query in un'altra tabella
devo una query intermedia che mi processo con map
, for
, ecc per ottenere il risultato che voglio. Alla fine ho un
val foo: DBIOAction[Seq[MySchema.Bar], NoStream, Effect.Read]
Ora ho un val bar: TableQuery[MySchema.Bar]
e voglio inserire foo ad esso.
Se foo sarebbe un Seq
, potrei semplicemente fare bar ++= foo
, ma non lo è.
L'unico modo che ho trovato è di materializzare il risultato attendendolo. Ti piace questa
val query = (bar ++= Await.result(db.run(foo), Duration.Inf))
Ovviamente query
deve essere eseguito ad un certo punto con db.run
. Ma ora ho due run-DB. Non sarebbe meglio avere tutto in un'unica corsa?
C'è un modo migliore per farlo?
'bar + = foo'? Ma dovresti comunque eseguire 'db.run' a prescindere dal fatto che sia' + = 'o' ++ = '... (?) – kornfridge
Penso che ++ = con effetti collaterali sia la slick2 api, mentre la slick3 è più funzionale, quindi richiede esplicitamente un 'db.run' – kornfridge
Sì il risultato di ++ = è ora una query che deve essere eseguita. Ho modificato la domanda in questo punto. Ma devo fare due chiamate db.run per questa attività. – masgo