私はMongoDBでSalatを使用しており、データベースでの重複を避けるために自然キーに変換しようとしています。私が使用しているケースクラスは、次のようになります。
case class Foo(someRelatedId: String, email: String ...)
someRelatedId + emailで構成される自然キーを追加し、MongoDBにデフォルトのObjectIdの代わりにそれを使用させたいと思います。ドキュメントから私はそれが可能であると感じます、しかし私はまだ実用的な解決策を模索しています。これは主に、Scala自体に習熟していないことが原因です。
更新:私は今、実用的な解決策を持っていますが、それが最善の方法であるかどうかまだ疑問に思っています
case class Foo(someRelatedId: String, email: String, naturalKey: String)
object Foo {
def apply((someRelatedId: String, email: String) {
apply(someRelatedId, email, someRelatedId+email)
}
}
そして、package.scalaで、カスタムのsalatコンテキストにマップします。
implicit val ctx = new Context() {
val name = Some("Custom Context")
}
ctx.registerGlobalKeyOverride(remapThis = "naturalKey", toThisInstead = "_id")
このようにして、ドメインクラスに必須の(意味のない)_idフィールドを持たないようにしますが、コンパニオンオブジェクトにapply()をオーバーロードする必要がありますが、これは少し不格好なようです。