这个问题是关于 slick 3.0 或 3.1 的(我对此很灵活)
我有一个中间查询,我用它来处理map
, for
等等以获得我想要的结果。最后我有一个
val foo: DBIOAction[Seq[MySchema.Bar], NoStream, Effect.Read]
现在我有一个val bar: TableQuery[MySchema.Bar]
我想将 foo 插入其中。
如果 foo 是一个Seq
我可以简单地做bar ++= foo
,但事实并非如此。
我发现的唯一方法是通过等待来实现结果。像这样
val query = (bar ++= Await.result(db.run(foo), Duration.Inf))
明显地query
需要在某个时刻运行db.run
。但现在我有两次数据库运行。将所有内容都集中在一次运行中不是更好吗?
有一个更好的方法吗?
DBIOAction
has map
/flatMap
函数,所以你可以写类似的东西
val insertAction = foo.flatMap(bar ++= _)
The insertAction
将是类型DBIOAction[Int, NoStream, Effect.Write]
或类似的东西(我不完全确定Int
和效果),然后你可以在数据库上运行它作为任何DBIOAction
using db.run
;然后您得到的是整个查询和插入结果的未来。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)