幻像dsl scala.notimplementederror

bqjvbblv  于 2021-06-15  发布在  Cassandra
关注(0)|答案(1)|浏览(357)

我使用的是phantom dsl(2.28.0版,scala 2.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)

我还是一个新手,所以任何建议都是有用的,提前谢谢。

h7appiyu

h7appiyu1#

好吧,在深入研究源代码之后,我发现 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))
  }

这解决了这个问题,虽然我仍然不知道为什么它是失败的第一种情况,所以任何答案与适当的解释仍然是欢迎的。

相关问题