幻影DSL scala.NotImplementedError

时间:2018-11-20 20:43:57

标签: scala cassandra phantom-dsl

我正在使用Phantom DSL( v2.28.0,scala v2.12.7 ),在对数据库的每次查询时,我都会收到以下模糊错误:

  

scala.NotImplementedError:缺少实现

当我使用.future()来解决查询时,不会发生这种情况,在这种情况下查询就可以了。另外,运行.executableQuery()方法将返回格式正确的查询,所有这些都表明我无法正确构建模型,但是我做错了,我不明白。查询示例:

工作查询:

db.entries.select.all.future // -> Returns a Future[ResultSet]
db.entries.select.where(_.user_id is userId).future() // -> ^

查询失败:

db.entries.select.all.fetch // -> Err
db.entries.select.where(_.user_id is userId).fetch() // -> Err
db.entries.select.all.fetchRecord // -> Err
... 

paginateRecord()等也是如此。

 case class Rec(
    id: UUID,
    body: String,
    time: DateTime,
    user_id: Integer
                    )

 abstract class active extends Table[active, Rec] {
    object id extends UUIDColumn with PartitionKey
    object body extends StringColumn
    object time extends DateTimeColumn
    object user_id extends IntColumn
  } 

class BasicDatabase(override val connector: CassandraConnection) extends Database[BasicDatabase](connector) {
    object entries extends active with Connector
  }
  implicit val keySpace: KeySpace = KeySpace("some_keyspace")
  implicit val session: Session = db.session
  object db extends BasicDatabase(CassandraConnector.default)

我仍然是一个新手,所以任何建议都是有用的,谢谢。

1 个答案:

答案 0 :(得分:0)

好的,在深入研究源代码之后,我发现抽象类的fromRow()方法失败了,所以我添加了一个覆盖:

abstract class active extends Table[active, Rec] {
    object id extends TimeUUIDColumn
    object body extends StringColumn
    object time extends DateTimeColumn
    object user_id extends IntColumn

    override def fromRow(row: Row): Rec = Rec(id(row), body(row), time(row), user_id(row))
  }

这解决了问题,尽管我仍然不确定在第一种情况下 为什么 失败,因此仍然欢迎任何带有适当解释的答案。< / p>