Slick 2.0 Generische CRUD-Operationen

Ich habe mich umgesehen, wie ich ein generisches Merkmal für Commons CRUD und andere Arten von Operationen implementieren kanndiese unddiese und die angegebene Methode funktionieren gut.

Was ich haben möchte, ist eine generische Methode zum Einfügen, meine Klasse sieht im Moment so aus (nicht generische Implementierung):

object CampaignModel {
  val campaigns = TableQuery[Campaign]

  def insert(campaign: CampaignRow)(implicit s: Session) = {
    campaigns.insert(campaign)
  }
}

Was ich bisher über den ersten Link ausprobiert habe, war Folgendes (generische Implementierung):

trait PostgresGeneric[T <: Table[A], A]  {
  val tableReference = TableQuery[T]

  def insertGeneric(row: ? What type goes here ?)(implicit s: Session) = tableReference.insert(row)

}

Wenn ich das inspiziereinsert Methode sieht es so aus, als sollte der richtige Typ seinT#TableElementType Aber mein Wissen ist ziemlich grundlegend und ich kann meinen Kopf nicht um Typen wickeln, versuchte ichT undA und der Compiler sagt, dass der Klassentyp nicht mit dem Merkmal einer übereinstimmt.

Andere Infos, die Tabellen werden mit den Slick Table Generation Tools generiert

case class CampaignRow(id: Long, name: Option[String])

/** Table description of table campaign. Objects of this class serve as prototypes for rows in queries. */
class Campaign(tag: Tag) extends Table[CampaignRow](tag, "campaign") {
  def * = (id, name) <>(CampaignRow.tupled, CampaignRow.unapply)

  /** Maps whole row to an option. Useful for outer joins. */
  def ? = (id.?, name).shaped.<>({
    r => import r._; _1.map(_ => CampaignRow.tupled((_1.get, _2)))
  }, (_: Any) => throw new Exception("Inserting into ? projection not supported."))

  /** Database column id AutoInc, PrimaryKey */
  val id: Column[Long] = column[Long]("id", O.AutoInc, O.PrimaryKey)
  /** Database column name  */
  val name: Column[Option[String]] = column[Option[String]]("name")
}

Antworten auf die Frage(1)

Ihre Antwort auf die Frage