Я использую Salat с MongoDB и пытаюсь конвертировать в натуральные ключи, чтобы избежать дубликатов в базе данных. Класс case, который я использую, выглядит примерно так:
case class Foo(someRelatedId: String, email: String ...)
Я хотел бы добавить естественный ключ, который состоит из электронной почты someRelatedId +, и 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 я сопоставляю пользовательский контекст :
implicit val ctx = new Context() {
val name = Some("Custom Context")
}
ctx.registerGlobalKeyOverride(remapThis = "naturalKey", toThisInstead = "_id")
Таким образом, я избегаю обязательного (бессмысленного) поля _id в моих классах домена, но мне приходится перегружать apply () на объекте-компаньоне, что кажется немного неуклюжим.