0

ファントムを使用して、カサンドラをプレイフレームワークに接続しています。チュートリアルに従って最初のクラスを作成しました。すべて正常に動作します。

case class User(id: String, page: Map[String,String])

sealed class Users extends CassandraTable[Users, User] {

  object id extends StringColumn(this) with PartitionKey[String]

  object page extends MapColumn[String,String](this)

  def fromRow(row: Row): User = {
    User(
      id(row),
      page(row)
    )
  }
}

abstract class ConcreteUsers extends Users with RootConnector {
  def getById(page: String): Future[Option[User]] = {
    select.where(_.id eqs id).one()
  }
  def create(id:String, kv:(String,String)): Future[ResultSet] = {
    insert.value(_.id, id).value(_.page, Map(kv)).consistencyLevel_=(ConsistencyLevel.QUORUM).future()
  }
}

class UserDB(val keyspace: KeySpaceDef) extends Database(keyspace) {

  object users extends ConcreteUsers with keyspace.Connector

}

object UserDB extends ResourceAuthDB(conn) {
  def createTable() {
    Await.ready(users.create.ifNotExists().future(), 3.seconds)
  }
}

ただし、まったく同じ方法で別のテーブルを作成しようとすると、コンパイル時に play が例外をスローします。

overriding method session in trait RootConnector of type => com.datastax.driver.core.Session;

別のテーブルを作成するにはどうすればよいですか? また、誰かが例外の原因を説明できますか? ありがとう。

編集

接続部分を 1 つのクラスに移動しました。

class UserDB(val keyspace: KeySpaceDef) extends Database(keyspace) {
  object users extends ConcreteUsers with keyspace.Connector
  object auth extends ConcreteAuthInfo with keyspace.Connector
}

今回のエラーメッセージは次のとおりです。

overriding object session in class AuthInfo; lazy value session in trait Connector of 
type com.datastax.driver.core.Session cannot override final member

メッセージが問題の特定に役立つことを願っています。

4

2 に答える 2

0

ここで目にする唯一の問題は、コネクタに関するものではなく、次の場所にあります。

def getById(page: String): Future[Option[User]] = {
  select.where(_.id eqs id).one()
}

これは次のようになります。

def getById(page: String): Future[Option[User]] = {
  select.where(_.id eqs page).one()
}

これを試してみると、コンパイルできました。デフォルトのものですRootConnectorか、それとも自分で別のものを定義しますか?

于 2016-07-07T07:02:23.500 に答える