Slick generic AND driver agnostic

rundsätzlich möchte ich Folgendes erreichen:

Slick 3.0.0 Datenbank-Agnostismus undSlick 3 wiederverwendbares generisches Repository

Ich habe viel versucht, aber ich kann das überhaupt nicht zum Laufen bringen.

abstract class BaseModel[T <: slick.lifted.AbstractTable[_]](query: TableQuery[T], val driver: JdbcProfile, val dbTableName: String)
{
  lazy val all: TableQuery[T] = TableQuery[T]
  import driver.api._

  def createTable = all.schema.create
  def dropTable = all.schema.create

  abstract class BaseTable[B](val tag: Tag) extends Table[B](tag, dbTableName)
  {
    def id = column[Long]("id", O.PrimaryKey, O.AutoInc)
  }
}

Jetzt haben wir hier schon ein Problem:

def createTable = all.schema.create und das gleiche mitdropTable... ->schema kann hier nicht aufgelöst werden, obwohl ich den Treiber vorher importiert habe.

Aber ein noch größeres Problem tritt auf, wenn ich diese Unterklasse:

Hier ist der Code

class NodeModel(driver: JdbcProfile, dbTableName: String) extends BaseModel[NodeTable](TableQuery[NodeTable], driver, dbTableName) {

  val dbDriver = driver
  import dbDriver.api._

  class NodeTable(tag: Tag) extends BaseTable[Node](tag)
  {
    override def * = id.? <> (Node, Node.unapply)
  }

  //lazy val all: TableQuery[NodeTable] = TableQuery[NodeTable]
  def createTable: DBIO[Unit] = all.schema.create
  def dropTable: DBIO[Unit] = all.schema.drop 
  def insert(node: Node) = all += node
}

Dies wird nicht offensichtlich kompiliert, weil ich nicht weitergeben kannNodeTable wieT, gibt aber eine Vorstellung davon, was ich erreichen möchte.

Haben Sie eine Idee, wie Sie das lösen können? Ich habe es auch mit Begleitobjekten versucht, indem ich dasBaseTable aus demBaseModel und versuchen ein @ zu ladsimpleDriver ... aber es sieht so aus, als ob die Funktionalität von Slick in einer neueren Version entfernt wurde:

Antworten auf die Frage(2)

Ihre Antwort auf die Frage