我正在尝试为Slick 2.0编写一个通用的CRUD trait。这个trait应该 a) 提供通用的方法,以读取/更新/删除实体,以及 b) 抽象出数据库。参考这个slick示例(数据库抽象)和这篇文章(CRUD trait),我提出了以下代码片段(缩短版):
trait Profile {
val profile: JdbcProfile
}
trait Crud[T <: AbstractTable[A], A] { this: Profile =>
import profile.simple._
val qry: TableQuery[T]
def countAll()(implicit session: Session): Int = {
qry.length.run
}
def getAll()(implicit session: Session): List[A] = {
qry.list // <-- type mismatch; found: List[T#TableElementType] required: List[A]
}
}
代码无效,因为存在类型不匹配的问题。第二个函数的返回类型似乎是
List[T#TableElementType]
类型,但需要的是List[A]类型。有没有解决这个问题的想法?欢迎提供有关通用Slick 2.0操作的进一步阅读参考资料。
Table
而不是AbstractTable
,它就能正常工作,但是为此,您需要一个具体的Profile
。我对slick 2.0中的配置文件如何使用感到困惑。 - poroszd