繁体   English   中英

如何使用Phantom Cassandra驱动程序为嵌套类建模

[英]How to model nested class with Phantom Cassandra driver

我有一个包含多个嵌套类的案例类。 我该如何搭配Phantom DSL

将其全部放入一个案例类中不是一种选择。

例如:

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

谢谢

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

建模时的一件事很重要,就是要考虑要执行的查询,但让我们直接讲一下。

Phantom确实允许您使用json表对嵌套类进行建模。

考虑以下:

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案例类类型。

声明字段时,应执行以下操作:

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

基本上,幻影所做的是将字符串json表示形式保存在字符串列中。

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

您不能真正做到这一点,因为它不是Hibernate之类的。 您需要使用嵌套类的ID,如下所示:

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

然后,只需将一个函数添加到case类中,该函数就可以返回Door对象,并在该对象上调用getById。

尝试simpledba https://github.com/doolse/simpledba似乎在列式数据库上定义了一个关系视图。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM