如何使用 Phantom Cassandra 驱动程序对嵌套 class 进行建模

How to model nested class with Phantom Cassandra driver

我有一个案例 class,其中有许多 class 嵌套。 我如何使用 Phantom DSL 建模

将所有内容都放在一个案例中 class 不是一种选择。

例如:

case class Car(age: Int,size: Int,door: Door)
case class Door(color:String, size:Int)

谢谢

你真的不能那样做,因为它不是 Hibernate 或类似的东西。您需要使用嵌套的 class' ID,如下所示:

case class Car(age: Int,size: Int, doorId: UUID)
case class Door(id: UUID, color:String, size:Int)

然后只需向 case class 添加一个函数,返回调用 getById 的 Door 对象。

嗯,当在 Cassandra 上建模时,您应该记住它不像关系数据库那样工作,而且 phantom 不是一种休眠。

建模时的一件重要事情是考虑要执行的查询,但让我们进入正题。

Phantom 允许您使用 json table.

对嵌套 classes 进行建模

考虑以下因素:

case class JsonTest(prop1: String, prop2: String)

case class JsonClass(
  id: UUID,
  name: String,
  json: JsonTest,
  jsonList: List[JsonTest],
  jsonSet: Set[JsonTest]
)

您在 JsonClass 3 列中有 JsonTest 案例 class 类型。

声明字段时,您应该这样做:

object json extends JsonColumn[ConcreteJsonTable, JsonClass, JsonTest](this) {
    override def fromJson(obj: String): JsonTest = {
      JsonParser.parse(obj).extract[JsonTest]
    }

    override def toJson(obj: JsonTest): String = {
      compactRender(Extraction.decompose(obj))
    }
  }

  object jsonList extends JsonListColumn[ConcreteJsonTable, JsonClass, JsonTest](this) {
    override def fromJson(obj: String): JsonTest = {
      JsonParser.parse(obj).extract[JsonTest]
    }

    override def toJson(obj: JsonTest): String = {
      compactRender(Extraction.decompose(obj))
    }
  }

  object jsonSet extends JsonSetColumn[ConcreteJsonTable, JsonClass, JsonTest](this) {
    override def fromJson(obj: String): JsonTest = {
      JsonParser.parse(obj).extract[JsonTest]
    }

    override def toJson(obj: JsonTest): String = {
      compactRender(Extraction.decompose(obj))
    }
  }

基本上 phantom 所做的是在字符串列中保存一个字符串 json 表示。

来源:https://github.com/outworkers/phantom/blob/develop/phantom-dsl/src/test/scala/com/websudos/phantom/tables/JsonTable.scala

尝试simpledbahttps://github.com/doolse/simpledba 它似乎定义了一个关于列式数据库的关系视图。