[英]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.