我有一個具有多個嵌套類的案例類。 我如何使用Phantom DSL進行建模如何用Phantom Cassandra驅動程序建模嵌套類
把它放到一個案例類中不是一種選擇。
例如:
case class Car(age: Int,size: Int,door: Door)
case class Door(color:String, size:Int)
感謝
我有一個具有多個嵌套類的案例類。 我如何使用Phantom DSL進行建模如何用Phantom Cassandra驅動程序建模嵌套類
把它放到一個案例類中不是一種選擇。
例如:
case class Car(age: Int,size: Int,door: Door)
case class Door(color:String, size:Int)
感謝
那麼,在Cassandra上建模的時候,你應該記住它不能像關係數據庫那樣工作,而幻影也不是一種休眠。
建模時的一件重要事情就是考慮你想要做的查詢,但讓我們來看看。
幻影允許您使用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表示。
你不能真正做到這一點,因爲它沒有休眠或類似的東西。您需要使用嵌套類的ID,像這樣:
case class Car(age: Int,size: Int, doorId: UUID)
case class Door(id: UUID, color:String, size:Int)
然後,只需添加一個功能的情況下類還給門對象調用getById上。
嘗試simpledba
https://github.com/doolse/simpledba 它似乎在定義數據庫柱狀關係視圖。
感謝您的幫助。這在Cassandra中看起來如何?你能夠查詢嵌套字段? – Ciaran0
@ Ciaran0它看起來像cassandra裏面的解析json,你無法查詢字段,只能檢索它們。 Datastax正在開發一個支持json的新版本,就像Mongo一樣。 –