私はPlay2ウェブアプリケーション内でSalongをMongoDBとのやり取り(Leon RadleyのきちんとしたSBTプラグイン経由)で使っています。ただし、ネストされたJSON/BSONモデル定義を反映するために、ネストされたケースDTOが多いため、ネストされたケースクラスDTOをベースモデルタイプのコンパニオンオブジェクトできちんと定義する必要がありました。コンパイルオブジェクトを使用してSalatケースクラスDTOの範囲を管理できますか?
これにより、私たちのSalatデータアクセス層で増殖したケースクラスDTOのスープの名前空間の衝突を防ぎます。たとえば、「Description」ケースクラスを定義しますが、異なるモデルオブジェクトに対して再定義されているので、名前空間にすっきりとした方法が必要でした。
package models.mongo
import com.novus.salat._
import com.mongodb.casbah.Imports._
import se.radley.plugin.salat._
case class TestSalatDto(
id: ObjectId = new ObjectId,
title: String,
description: TestSalatDto.Description)
object TestSalatDto {
case class Description(
brief: String,
full: String)
}
このすべてが美しくコンパイルが、com.novus.salat.util.ToObjectGlitchと、実行時に失敗します:引数の型の不一致この小さなスニペット/例のように私たちは、この目的のためにコンパニオンオブジェクトを使用してみましたをMongoからアンマーシャリングしています。
コンパニオンオブジェクトの定義をパッケージ定義(DTOスープをカプセル化するというやや複雑な方法)に切り替えるだけで、すべてが正常に実行されます(アンマーシャリングは処理を行います)。
私は、オブジェクト内のケースクラスの宣言が実行時に失敗する理由について混乱しています。オブジェクト内にケースクラス(Salat DTO)を定義するトリックはありますか?
あなたがTestSalatDto._をインポートする場合、まだエラーを取得し、その後、直接説明を使用していますか?多分それは範囲にある必要がありますか? – Brian