我正在尝试制作一个通用 DAO 类以在我的所有 DAO 对象中使用。
我有以下自动生成的 Slick 模型(在文件中dbTables.Tables
):
case class UserusergroupsRow(userusergroupid: Int, usergroupid: Int, userid: Int, status: String, createdby: Option[String], createddate: Option[java.sql.Timestamp], lastupdatedby: Option[String], lastupdateddate: Option[java.sql.Timestamp])
class Userusergroups(tag: Tag) extends Table[UserusergroupsRow](tag, "userUserGroups") {
def * = (userusergroupid, usergroupid, userid, status, createdby, createddate, lastupdatedby, lastupdateddate) <> (UserusergroupsRow.tupled, UserusergroupsRow.unapply)
/** Maps whole row to an option. Useful for outer joins. */
def ? = (userusergroupid.?, usergroupid.?, userid.?, status.?, createdby, createddate, lastupdatedby, lastupdateddate).shaped.<>({r=>import r._; _1.map(_=> UserusergroupsRow.tupled((_1.get, _2.get, _3.get, _4.get, _5, _6, _7, _8)))}, (_:Any) => throw new Exception("Inserting into ? projection not supported."))
/** Database column userUserGroupId PrimaryKey */
val userusergroupid: Column[Int] = column[Int]("userUserGroupId", O.PrimaryKey)
/** Database column userGroupId */
val usergroupid: Column[Int] = column[Int]("userGroupId")
/** Database column userId */
val userid: Column[Int] = column[Int]("userId")
/** Database column status */
val status: Column[String] = column[String]("status")
/** Database column createdBy */
val createdby: Column[Option[String]] = column[Option[String]]("createdBy")
/** Database column createdDate */
val createddate: Column[Option[java.sql.Timestamp]] = column[Option[java.sql.Timestamp]]("createdDate")
/** Database column lastUpdatedBy */
val lastupdatedby: Column[Option[String]] = column[Option[String]]("lastUpdatedBy")
/** Database column lastUpdatedDate */
val lastupdateddate: Column[Option[java.sql.Timestamp]] = column[Option[java.sql.Timestamp]]("lastUpdatedDate")
}
有了这个,我试图创建一个抽象类,如下所示:
abstract class genericDao[tableClassType<:Table[caseClassType],caseClassType]{
//var a:caseClassType
//var b:tableClassType
val tableQuery : TableQuery[tableClassType]
def getAllfrom = DB.withTransaction{
implicit session => tableQuery.list
}
def saveT(obj:caseClassType) = DB.withTransaction{
implicit session => tableQuery+=obj
}
}
这是我的 DAO 对象:
object userDao extends genericDao[Userusergroups,UserusergroupsRow] {
val tableQuery = TableQuery[Userusergroups]
//create a new user
}
当我尝试调用userDao.getAllfrom
编译器时显示错误:
类型参数 [dbTable.Tables.Userusergroups,dbTable.Tables.UserusergroupsRow] 不符合类 genericDao 的类型参数界限 [tableClassType <: play.api.db.slick.Config.driver.simple.Table[caseClassType],caseClassType]