nhà phát triển Salat chính tại đây.
Giống như Milan đã đề xuất, hãy tạo một lớp trường hợp cho khóa tổng hợp của bạn:
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 */ )
Nếu bạn phản đối "_id" làm tên trường, bạn có thể sử dụng ghi đè toàn cục trong ngữ cảnh để sửa lại "_id" thành "naturalKey" hoặc cung cấp ghi đè đặc biệt @Key trên từng đối tượng.
Cá nhân tôi không thích đặt tên khác cho _id trong các mô hình của bạn vì khi đó các truy vấn Mongo của bạn phải sử dụng khóa được tuần tự hóa "_id" trong khi tất cả logic nghiệp vụ của bạn phải sử dụng tên trường lớp trường hợp ("naturalKey" hoặc bất cứ thứ gì), nhưng YMMV .
P.S. Danh sách gửi thư của chúng tôi có tại http://groups.google.com/group/scala-salat - Tôi sẽ xem câu hỏi của bạn ở đó nhanh hơn Stack Overflow.