我现在正在尝试使用Slick的compiled queries功能。对于简单查询,它工作正常,但涉及与Tuple返回类型的连接的查询会导致编译错误。
这是我试图用编译的查询重写的一个dao方法:
def getByArticle(id: Int)(implicit session: JdbcBackend#Session) = {
comments
.filter(_.articleId === id)
.leftJoin(users).on(_.userId === _.id)
.list
}
当我试图像那样修改它时
val byArticleCompiled = Compiled((id: Column[Int]) => comments
.filter(_.articleId === id)
.leftJoin(users).on(_.userId === _.id)
)
def getByArticle(id: Int)(implicit session: JdbcBackend#Session) = byArticleCompiled(id).list
发生以下编译错误:
[错误] 计算类型 CommentsRepositoryComponentImpl.this.profile.simple.Column [Int] => scala.slick.lifted.WrappingQuery [(CommentsRepositoryComponentImpl.this.Comments, CommentsRepositoryComponentImpl.this.Users),(CommentsRepositoryComponentImpl.this.Comments#TableElementType, CommentsRepositoryComponentImpl.this.Users#TableElementType)]不能 编译(作为类型C)[错误] val byArticleCompiled = 编译((id:Column [Int])=>评论
背后是否存在任何概念问题,或者我只是做错了什么?
答案 0 :(得分:1)
似乎联接生成的这些查询的Executable
类型类存在问题。作为解决方法,附加像.withFilter(_ => true)
这样的虚拟操作使其编译。我们将研究2.0.2(https://github.com/slick/slick/issues/746)。