1

我正在尝试制作一个通用 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]

4

0 回答 0