我有一个包含许多嵌套类的案例类。我如何使用 Phantom DSL 建模
将所有这些都放在一个案例类中不是一种选择。
例如:
case class Car(age: Int,size: Int,door: Door)
case class Door(color:String, size:Int)
谢谢
我有一个包含许多嵌套类的案例类。我如何使用 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 表示保存在字符串列中。
你不能真正做到这一点,因为它不是 Hibernate 或类似的东西。您需要使用嵌套类的 ID,如下所示:
case class Car(age: Int,size: Int, doorId: UUID)
case class Door(id: UUID, color:String, size:Int)
然后只需向案例类添加一个函数,该函数返回调用 getById 的 Door 对象。
试试simpledba
https://github.com/doolse/simpledba
它似乎在列式数据库上定义了一个关系视图。