0

私は現在、Slick で最初の一歩を踏み出しています。私は特に codegen に興味があります。はじめに、Typesafe Activator (activator-dist-1.3.7) をインストールし、Activator ui を開始し、テンプレート「Using Slicks default code generator」(slick-codegen-example) から新しいプロジェクトを作成して開始しました。

これは非常にうまくいき、実際にソース コードが生成されました。Build.scala を開くと、参照されているバージョンが非常に古いことに気付きました (たとえば、2013 年の Scala 2.10.3 を使用)。そこで、現在のバージョンを確認して置き換えました

      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 で

      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"
  ),

次に、このビルドを作成するために、パッケージ名も更新しました (アレックス: ヒントをありがとう!)。また、テーブルの作成SQLコードに「現在存在する場合」を追加しました。これは、何らかの不明な理由で、データベースがテーブルが既に存在していると不平を言ったためです。

したがって、最終的に Tables.scala が作成されました :) ただし、サンプル クエリで Example.scala を実行しても、何も出力されません。いくつかの調査の後、これは Slick 3 が非同期で動作するようになったためであることがわかりました。他の例では、db.run が Await.result 内にラップされていることがわかりました。だから私はこれを試しましたが、コンパイルエラーにつながりました:

value groupBy is not a member of (String, String)

何が悪かったのか?どうすれば修正できますか?クエリ コードは次のようになります。

  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")
          )
  }
4

2 に答える 2

0

slick 3.0 のパッケージ構造が変更されました。slick.codegen.SourceCodeGenerator代わりに使用する必要がありますscala.slick.codegen.SourceCodeGenerator

于 2015-12-17T08:17:52.647 に答える