相关疑难解决方法(0)

如何编写与数据库无关的Play应用程序并执行首次数据库初始化?

我正在使用SlickPlay 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)

scala playframework-2.0 slick

62
推荐指数
2
解决办法
1万
查看次数

光滑的通用且与驱动程序无关

基本上,我要实现的是以下各项的组合:

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.createdropTable...-> 相同,schema在这里无法解决,尽管我之前已导入驱动程序。

但是,当我将其子类化时,会出现一个更大的问题:

这是代码

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

  val dbDriver = driver …
Run Code Online (Sandbox Code Playgroud)

generics scala database-agnostic slick

1
推荐指数
1
解决办法
828
查看次数