to pytanie jest o gładkie 3,0 lub 3,1 (Ja elastycznie iż)Scala + Slick 3: Wprowadzanie wynik jednego zapytania do innej tabeli
mam zapytanie pośrednią, która przetwarzać z map
, for
, etc. Aby uzyskać pożądany wynik. W końcu mam
val foo: DBIOAction[Seq[MySchema.Bar], NoStream, Effect.Read]
Teraz mam val bar: TableQuery[MySchema.Bar]
i chcę wstawić foo w niej.
Jeśli foo byłby Seq
, mógłbym po prostu zrobić bar ++= foo
, ale tak nie jest.
Jedyny sposób, jaki znalazłem, to zmaterializować wynik, oczekując na niego. Podoba Ci się to
val query = (bar ++= Await.result(db.run(foo), Duration.Inf))
Oczywiście query
musi być prowadzony w pewnym momencie z db.run
. Ale teraz mam dwa przebiegi DB. Czy nie byłoby lepiej mieć wszystko w jednym biegu?
Czy jest lepszy sposób to zrobić?
'bar + = foo'? Ale nadal musiałbyś "db.run" go bez względu na to, czy jest to '+ =' czy '++ =' ... (?) – kornfridge
Myślę, że ++ = z efektami ubocznymi był slick2 api, podczas gdy slick3 jest bardziej funkcjonalny, więc wymaga jawnego zrobienia 'db.run' – kornfridge
Tak, wynik ++ = jest teraz zapytaniem, które należy uruchomić. W tym punkcie zredagowałem pytanie. Ale muszę wykonać dwa wywołania db.run dla tego zadania. – masgo