4

Quill ライブラリを使用して Cassandra にクエリを実行するこの単純なアプリケーションを作成しました

QuillSample.scala

import java.util.UUID
import io.getquill._
import scala.concurrent.ExecutionContext.Implicits.global
object QuillSample extends App {
   lazy val ctx = new CassandraSyncContext[SnakeCase]("ctx")
   import ctx._
   val getAllRows = quote {
      query[Movies]
   }
   val result = ctx.run(getAllRows)
   println(result)
}
case class Movies(uUID: UUID,
                  avgRating: Float,
                  genres: Set[String],
                  name: String,
                  releaseDate: java.util.Date,
                  videoReleaseDate: java.util.Date)

build.sbt

name := "QuillSample"
version := "1.0"
scalaVersion := "2.12.0"
libraryDependencies ++= Seq(
   "io.getquill" % "quill-cassandra_2.11" % "1.0.0"
)

アプリケーションのプロパティ

ctx.keyspace=movielens_small
ctx.preparedStatementCacheSize=1000
ctx.session.contactPoint=192.168.1.169
ctx.session.withPort=9042
ctx.session.queryOptions.consistencyLevel=LOCAL_QUORUM
ctx.session.withoutMetrics=true
ctx.session.withoutJMXReporting=false
ctx.session.maxSchemaAgreementWaitSeconds=1
ctx.session.addressTranslater=com.datastax.driver.core.policies.IdentityTranslator

これはコンパイル時エラーを返します

Error:(14, 12) Can't find an implicit `SchemaMeta` for type `com.abhi.Movies`
      query[Movies]

ここに記載されているドキュメントに基づいて

https://github.com/getquill/quill/blob/master/CASSANDRA.md

欠落している暗黙を満たすために他にどのようなコードが必要かはわかりません。

4

2 に答える 2

5

Quill はまだ Scala 2.12 をサポートしていません。進行状況については、この PRを追跡してください。

変更scalaVersion:

scalaVersion := "2.11.8"

また、1.0.0 リリース後に行われたこの修正のため、スナップショットの依存関係を使用する必要があります。

resolvers ++= Seq(
  Resolver.sonatypeRepo("snapshots")
)

libraryDependencies ++= Seq(
  "io.getquill" %% "quill-cassandra" % "1.0.2-SNAPSHOT"
)

次に、 のカスタム エンコーダーとデコーダーを実装する必要がありますscala.collection.Set[T]

trait Encoders {
  this: CassandraSessionContext[_] =>

  implicit def setEncoder[T](implicit t: ClassTag[T]): Encoder[Set[T]] =
    encoder((index, value, row) => row.setSet(index, value.asJava, t.runtimeClass.asInstanceOf[Class[T]]))
}

trait Decoders {
  this: CassandraSessionContext[_] =>

  implicit def setDecoder[T](implicit t: ClassTag[T]): Decoder[Set[T]] =
    decoder((index, row) => row.getSet(index, t.runtimeClass.asInstanceOf[Class[T]]).asScala.toSet)
}

そして、あなたの文脈でそれを混ぜてください:

lazy val ctx = new CassandraSyncContext[SnakeCase]("ctx") with Encoders with Decoders

おそらく、次の警告が表示されます。

クラス javax.annotation.Nullable が見つかりません - スタブを続行します。

それを修正するには、次の依存関係を追加します。

libraryDependencies ++= Seq(
  "com.google.code.findbugs" % "jsr305" % "3.0.1"
)
于 2016-11-27T13:45:18.737 に答える
-1

構築できるSchemaMetaがないように見えるので、com.abhi.Movies明示的に指定する必要があります

implicit val movieSchemaMeta = schemaMeta[com.abhi.Movies](....)
于 2016-11-12T15:04:34.957 に答える