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: