我正在将 Salat 与 MongoDB 一起使用,并且我正在尝试转换为自然键以避免数据库中的重复。我使用的案例类看起来有点像:
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(),这看起来有点笨拙。