我有一个包含许多嵌套类的case类。 我如何使用Phantom DSL进行建模
将它全部放入一个案例类中是不可取的。
例如:
case class Car(age: Int,size: Int,door: Door)
case class Door(color:String, size:Int)
由于
答案 0 :(得分:3)
好吧,在对Cassandra进行建模时,你应该记住它不像关系数据库那样工作,而幻像不是一种休眠。
建模时的一个重要事项是考虑您想要进行的查询,但让我们明白这一点。
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表示保存在字符串列中。
答案 1 :(得分:1)
你不能真的这样做,因为它不是Hibernate或类似的东西。您需要使用嵌套类的ID,如下所示:
df['a'] = df['a'].astype('O')
然后只需在case类中添加一个函数,该函数返回对象调用getById的对象。
答案 2 :(得分:0)
试试simpledba
https://github.com/doolse/simpledba
它似乎定义了柱状数据库的关系视图。