我在一对多关系中有光滑的联接查询

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时,SlickTreeExceptionapplicative joins


  Monadic联接是使用flatMap创建的。从理论上讲它们更多
  比应用连接更强大,因为右侧可能取决于
  在左手侧。但是,这在标准SQL中是不可能的,
  所以Slick必须将它们编译为应用联接,这是
  在许多有用的情况下都可能实现,但并非在所有情况下都可行(而且
  理论上可行但Slick无法执行的情况
  是否需要转换)。如果单子连接不能正确进行
  翻译,它将在运行时失败。


您可以用.groupBy(_._1.idUser).flatMap(_._2)更改.sortBy(_._1.idUser)吗?

关于mysql - Scala Slick分页可编译,但在运行时崩溃,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/47203412/

10-11 07:47