如何使用 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 表示。
尝试simpledba
https://github.com/doolse/simpledba
它似乎定义了一个关于列式数据库的关系视图。
我有一个案例 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 表示。
尝试simpledba
https://github.com/doolse/simpledba
它似乎定义了一个关于列式数据库的关系视图。