Slick 2.0 の一般的な CRUD トレイトを作成しようとしています。トレイトは、a )エンティティを読み取り/更新/削除するための一般的なメソッドを提供し、b)データベースから抽象化する必要があります。この洗練された例(データベースの抽象化) とこの記事(CRUD 特性)に従って、次の (短縮された) コード スニペットを思いつきました。
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]
}
}
タイプが一致しないため、コードは無効です。2 番目の関数の戻り値の型は型のようですが、List[T#TableElementType]
List[A] である必要があります。問題を解決する方法についてのアイデア。一般的な Slick 2.0 操作に関するさらなる資料への追加の参照も歓迎します。