我正在使用Slick与Play Framework 2.1,我有一些麻烦.
鉴于以下实体......
package models
import scala.slick.driver.PostgresDriver.simple._
case class Account(id: Option[Long], email: String, password: String)
object Accounts extends Table[Account]("account") {
def id = column[Long]("id", O.PrimaryKey, O.AutoInc)
def email = column[String]("email")
def password = column[String]("password")
def * = id.? ~ email ~ password <> (Account, Account.unapply _)
}
Run Code Online (Sandbox Code Playgroud)
...我必须为特定的数据库驱动程序导入一个包,但我想在生产中使用H2进行测试和PostgreSQL.我该怎么办?
我能够通过覆盖单元测试中的驱动程序设置来解决此问题:
package test
import org.specs2.mutable._
import play.api.test._
import play.api.test.Helpers._
import scala.slick.driver.H2Driver.simple._
import Database.threadLocalSession
import models.{Accounts, Account} …Run Code Online (Sandbox Code Playgroud) 基本上,我要实现的是以下各项的组合:
Slick 3.0.0数据库不可知论 和 Slick 3可重用的通用存储库
实际上,我做了很多尝试,但是根本无法使用。
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)
}
}
Run Code Online (Sandbox Code Playgroud)
现在,这里已经有一个问题:
def createTable = all.schema.create和dropTable...-> 相同,schema在这里无法解决,尽管我之前已导入驱动程序。
但是,当我将其子类化时,会出现一个更大的问题:
这是代码
class NodeModel(driver: JdbcProfile, dbTableName: String) extends BaseModel[NodeTable](TableQuery[NodeTable], driver, dbTableName) {
val dbDriver = driver …Run Code Online (Sandbox Code Playgroud)