【发布时间】:2012-01-16 16:11:36
【问题描述】:
我将 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 中我映射到 custom salat context:
implicit val ctx = new Context() {
val name = Some("Custom Context")
}
ctx.registerGlobalKeyOverride(remapThis = "naturalKey", toThisInstead = "_id")
这样我可以避免在我的域类中使用强制性(无意义的)_id 字段,但我必须在伴生对象上重载 apply(),这似乎有点笨拙。
【问题讨论】:
-
如果您创建另一个 val 作为 someRelatedId+email 并使用 @Key("_id") 对其进行注释,如果您不需要它持久化,则将 @Ignore 放在 someRelatedId 上?