【发布时间】:2014-03-11 22:28:33
【问题描述】:
我正在尝试为 Slick 2.0 编写一个通用的 CRUD 特征。 trait 应该 a) 提供通用方法来读取/更新/删除实体以及 b) 从数据库中抽象。在this slick example(数据库抽象)和this article(CRUD trait)之后,我想出了以下(缩短的)代码sn-p:
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 中的配置文件是如何使用的。
标签: scala crud slick slick-2.0