Desarrollador principal de Salat aquí.
Como sugirió Milan, cree una clase de caso para su clave compuesta:
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 */ )
Si se opone a "_id" como nombre de campo, puede usar una anulación global en el contexto para reasignar "_id" a "naturalKey" o proporcionar anulaciones de @Key ad hoc en cada objeto.
Personalmente, no me gusta darle a _id un nombre diferente en sus modelos, ya que sus consultas de Mongo deben usar la clave serializada "_id", mientras que toda su lógica comercial debe usar el nombre de campo de clase de caso ("naturalKey" o lo que sea), pero YMMV .
PD Nuestra lista de correo está en http://groups.google.com/group/scala-salat - Veré tu pregunta más rápido allí que Stack Overflow.