首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用当前版本运行slick-codegen示例

使用当前版本运行slick-codegen示例
EN

Stack Overflow用户
提问于 2015-12-17 08:02:28
回答 2查看 354关注 0票数 0

我现在正在用光滑做我的第一步。我对码元特别感兴趣。为了开始工作,我安装了Typesafe Activator (激活剂-dist-1.3.7),启动了Activator ui,从模板中创建了一个新项目“使用from缺省代码生成器”(slick示例)并启动了它。

这非常成功,并且确实生成了源代码。在打开Build.scala时,我注意到引用的版本非常过时(例如,从2013年开始使用Scala2.10.3)。因此,我检查了当前的版本,并替换了

代码语言:javascript
复制
      scalaVersion := "2.10.3",
  libraryDependencies ++= List(
    "com.typesafe.slick" %% "slick" % "2.1.0",
    "com.typesafe.slick" %% "slick-codegen" % "2.1.0-RC3",
    "org.slf4j" % "slf4j-nop" % "1.6.4",
    "com.h2database" % "h2" % "1.3.170"
  ),

在Build.scala中

代码语言:javascript
复制
      scalaVersion := "2.11.7",
  libraryDependencies ++= List(
    "com.typesafe.slick" %% "slick" % "3.1.1",
    "com.typesafe.slick" %% "slick-codegen" % "3.1.1",
    "org.slf4j" % "slf4j-nop" % "1.7.13",
    "com.h2database" % "h2" % "1.4.190"
  ),

然后,我还更新了包名(Alex:谢谢您的提示!)来建造这座建筑。我还在create代码中添加了“如果现在存在”,因为出于某种未知的原因,数据库抱怨这些表已经存在。

因此,最终创建了Tables.scala :)但是,使用示例查询运行Example.scala不会输出任何内容。经过一些研究,我了解到这是因为Slick 3现在异步工作。在其他一些例子中,如果已经看到db.run被包装在Await.result中。因此,我尝试了这一点,这会导致编译错误:

代码语言:javascript
复制
value groupBy is not a member of (String, String)

哪里出了问题?我怎么才能修好它?查询代码现在如下所示:

代码语言:javascript
复制
  val q = Companies.join(Computers).on(_.id === _.manufacturerId).map {
   case (co,cp) => (co.name, cp.name) }

  Await.result(db.run(q.result), Duration.Inf).foreach { result =>
    println(result.groupBy{ case (co,cp) => co }
            .mapValues(_.map{ case (co,cp) => cp })
            .mkString("\n")
          )
  }
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-12-18 08:02:20

)除了更改版本号(请参阅上文)之外,我还必须:

  • 删除“scala”Build.scala中灵活的包名的前缀(再次感谢,Alex)
  • 将create.sql中的所有“创建表”更改为“如果不存在创建表”
  • 重写Example.scala: 对象示例为该演示程序扩展了预填充的抛出和内存中db的App { // connection信息,该示例在每次运行val url = "jdbc:h2:mem:test;INIT=runscript from 'src/main/sql/create.sql'“val = Database.forURL(url,驱动器= "org.h2.Driver") //使用生成的代码时都刚刚初始化。我们的Build.sbt确保它们是在编译前生成的。val query =Companies.join(计算机).on(_.id === _.manufacturerId).map{ case ( co,cp) => (co.name,cp.name) } val前途= db.run(query.result)未来onSuccess { case结果=> println(result.groupBy{ case (co,cp) => co} .mapValues(_.map{ case (co,cp)=>co}.mapValues(_.map{case(co,cp)=>co}.mapValues)( cp) => cp }) .mkString("\n") )}未来onFailure { case t => println(“获取错误:”+ t.getMessage) } Thread.sleep(1000) }
票数 0
EN

Stack Overflow用户

发布于 2015-12-17 08:17:52

Sleick3.0的封装结构是变化。您需要使用slick.codegen.SourceCodeGenerator而不是scala.slick.codegen.SourceCodeGenerator

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34329449

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档