Что ж, при моделировании вещей на 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 внутри строкового столбца.
источник: https://github.com/outworkers/phantom/blob/develop/phantom-dsl/src/test/scala/com/websudos/phantom/tables/JsonTable.scala
person
Thiago Pereira
schedule
02.03.2016