основен разработчик на Salat тук.
Както предложи Милан, създайте клас case за вашия съставен ключ:
case class FooKey(someRelatedId: String, email: String)
case class Foo(@Key("_id") naturalKey: FooKey) {
// use @Persist if you want these fields serialized verbatim to Mongo - see https://github.com/novus/salat/wiki/Annotations for details
@Persist val email = naturalKey.email
@Persist val someRelatedId = naturalKey.someRelatedId
}
object FooDAO extends SalatDAO[Foo, FooKey](collection = /* some Mongo coll */ )
Ако възразите срещу „_id“ като име на поле, можете да използвате глобална замяна в контекста, за да пренасочите „_id“ към „naturalKey“ или да предоставите ad hoc @Key замени за всеки обект.
Аз лично не обичам да давам различно име на _id във вашите модели, тъй като тогава вашите заявки за Mongo трябва да използват сериализирания ключ „_id“, докато цялата ви бизнес логика трябва да използва името на полето за клас случай („naturalKey“ или каквото и да е), но YMMV .
P.S. Нашият пощенски списък е на http://groups.google.com/group/scala-salat - Ще видя въпроса ви по-бързо там, отколкото Stack Overflow.