转换为postgres时出错

时间:2014-07-09 05:59:42

标签: playframework slick slick-2.0 playframework-2.3 play-slick

背景

  • 播放2.3
  • Slick 2.1
  • Play-Slick 0.7
  • 在Typesafe Activator中运行

我有一个非常基本的基于Play和Slick的应用程序。到目前为止,我一直在使用大多数示例中默认使用的内存中的h2数据库。

application.conf我有以下几行:

db.default.driver=org.h2.Driver
db.default.url="jdbc:h2:mem:play"

如果我使用

import play.api.db.slick.Config.driver.simple._

对于与数据库交互的任何代码,应用程序知道在application.conf中引入定义,并且在运行我的应用程序时会发生以下情况:

  • evolutions.default / 1.sql已创建
  • 在内存中实例化新的h2数据库
  • 1.sql在该db上运行
  • 应用程序可以与db交互

问题

我想迁移到使用Postgres数据库,所以我已将application.conf更改为:

db.default.driver=org.postgresql.Driver
db.default.url="jdbc:postgresql://localhost:5432/testdb"
db.default.user=testuser

我已将以下内容添加到build.sbt

libraryDependencies ++= Seq(
  ...
  "org.postgresql" % "postgresql" % "9.3-1100-jdbc4"
)

但是,如果我写下如下测试:

import models._
import org.specs2.mutable.Specification
import play.api.db.slick.Config.driver.simple._
import play.api.db.slick.DB
import scala.language.reflectiveCalls
import play.api.test.{FakeApplication, WithApplication}

class FooSpec extends Specification {    
  "DB" should {    
    "store Foos" in new WithApplication {    
      val foos = TableQuery[FooTable]    
      DB.withSession { implicit s: Session =>
        foos.insert(Foo("bar"))
      }
    }
  }
}

我收到一些我不理解的错误:

  

[error] p.a.d.s.d.TableScanner $ - 转换为DDL时出错。检查用于Table / TableQuery的配置文件是否与DDL生成使用的配置文件相同。

     

[info] foospec

     

[info] DB应该

     

[info]!商店Foos

     

[error] SlickException:JdbcProfile没有类型Int / INTEGER的TypeInfo

(如果需要,我有一个错误的堆栈跟踪,但我现在已经把它留了出来)

知道我做错了吗?

1 个答案:

答案 0 :(得分:1)

我不确切知道在哪里,但您在不同的地方导入不同的Slick驱动程序。当从它们中获取的工件混淆时,您会得到SlickException: JdbcProfile has no TypeInfo for type Int/INTEGER