幻影cassandra多个表抛出异常

时间:2016-07-07 03:05:34

标签: scala playframework cassandra phantom-dsl

我正在使用幻像在play框架中连接cassandra。创建了本教程后的第一堂课。一切正常。

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;

我怎样才能构建另一个表?也有人可以解释导致异常的原因吗?感谢。

修改

我将连接部分集中在一个类中:

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

希望该消息有助于识别问题。

2 个答案:

答案 0 :(得分: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是默认值还是您自己定义另一个?

答案 1 :(得分:0)

我花了6个小时才弄明白这个问题。这是因为在另一个表中有一个名为“session”的列。事实证明,在选择列名时需要小心。 “会话”显然给出了上述例外情况。 Cassandra还有很多保留关键字。如果您不小心使用其中一个作为列名,幻像不会抛出任何异常(也许它应该?)。我不知道幻影中是否保留了任何其他关键字。它们的列表将非常有用。