2016-07-07 7 views
0

私はプレーンフレームワークでcassandraを接続するためにファントムを使用しています。チュートリアルの後に最初のクラスを作成しました。すべてうまく動作します。私は別のテーブルを作成して構築できる方法phantom cassandra複数のテーブルが例外をスローする

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

:私は正確に同じ方法で、次の別のテーブルを作成しようとするとき、コンパイル

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

はしかし、プレイが例外をスロー?誰かが例外の原因を説明することもできますか?ありがとう。

EDIT

は、私は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 

メッセージが問題を識別するのに役立ちます願っています。

答えて

0

問題を理解するまでに6時間かかりました。もう一方の表には「セッション」という名前の列があるためです。列名を選択するときは注意が必要です。 "セッション"は明らかに上記の例外を与えます。カサンドラには予約語句の長いリストもあります。間違って列名としてそれらの1つを使用すると、ファントムは例外をスローしません(おそらくそれは必要ですか?)。他のキーワードがファントムで予約されているかどうかはわかりません。それらのリストが本当に役に立つでしょう。

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がデフォルトのものか、自分で別のものを定義していますか?

+0

idとpageはtypoです。それは私のコードでは最新です。問題は別のテーブルを定義するたびに発生します。 '抽象クラスConcretePagesはRootConnectorでページを拡張します{'、コンパイル時に失敗します。 – yang

関連する問題