私はプレイ2.6.6、スカラ座2.12.3とツルツル3.0.0を使用しています。ネストされたケースクラスのリストのための滑らかな投影を作成するには?
入れ子になった場合のクラスがあった場合、私は、最初の場合クラス構造を以下た:
case class Device(id: Int, deviceUser: Option[DeviceUser] =None)
case class DeviceUser(name: Option[String] = None)
だから、私はデバイスクラスに対して次の投影を作成した:
class DevicesTable(tag: Tag) extends Table[Device](tag, "DEVICES") {
def id = column[Int]("ID", O.PrimaryKey)
def name = column[Option[String]]("NAME")
def deviceUser = name.<>[Option[DeviceUser]](
{
(param: Option[String]) => {
param match {
case Some(name) => Some(DeviceUser(Some(name)))
case None => None
}
}
},
{
(t: Option[DeviceUser]) =>
{
t match {
case Some(user) => Some(user.name)
case None => None
}
}
}
)
def * = (id, deviceUser).<>(Device.tupled, Device.unapply)
}
上記設定しましたうまく動作します。私は上記の投影法を使ってデータを簡単に保存して取り出すことができました。 But now, my requirement has changed and I need to store list of nested case class
。だから、クラス構造は、次のようになりました。オプション[一覧[DeviceUser]]:私はフィールドdeviceUserための投影を定義することができ、いくつかの方法が
case class Device(id: Int, deviceUser: Option[List[DeviceUser]] =None)
case class DeviceUser(name: Option[String] = None)
ありますか?
更新:私はnon-relational
アプローチの詳細を探しています。何体は、これまでのソリューションを提案していない、ので
1つのデバイスが多くDeviceUserを含めることができます - あなたは1対多のDBレベルでの関係としてそれを表現しなければならない –
はい、それは次のようになります関係する方法。しかし、ここでは「非リレーショナル」アプローチをもっと探しています。 – oblivion
JSON/XMLにシリアル化し、BLOB列に保存します。 DALはそれを解析し、必要なタイプを作成する必要があります。クールなアイディアザッツ –