我在一对多关系中有光滑的联接查询
val query = for {
((u,a),j) <- users join address on(_.idUser === _.idUser) join
jobs on(_._1.idUser == _.idUser)
} yield (u,a,j)
val res = db.run(query.groupBy(_._1.idUser).flatMap(_._2)
.drop((page - 1) * perPage).take(perPage).result)
我需要拥有唯一的用户,这就是为什么我首先要按idUser分组的原因。关键是代码可以编译,但是当我运行时,我遇到了一个错误提示:
“ slick.SlickTreeExceptions:未解决的单子连接:Bind s2中的非纯select子句”
对于如何实现这种分页的任何帮助将不胜感激。
谢谢
最佳答案
_._1.idUser == _.idUser
应该是_._1.idUser === _.idUser
当thrown减为monadic joins时,SlickTreeException
为applicative joins。
Monadic联接是使用flatMap
创建的。从理论上讲它们更多
比应用连接更强大,因为右侧可能取决于
在左手侧。但是,这在标准SQL中是不可能的,
所以Slick必须将它们编译为应用联接,这是
在许多有用的情况下都可能实现,但并非在所有情况下都可行(而且
理论上可行但Slick无法执行的情况
是否需要转换)。如果单子连接不能正确进行
翻译,它将在运行时失败。
您可以用.groupBy(_._1.idUser).flatMap(_._2)
更改.sortBy(_._1.idUser)
吗?
关于mysql - Scala Slick分页可编译,但在运行时崩溃,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/47203412/