Автор салата здесь.
У Salat нет ничего подобного ORM ленивой загрузки. Обозначение @Persist
предназначено для сохранения полей вне конструктора, но подавляет десериализацию, потому что десериализуются только поля в конструкторе.
Но вы можете легко решить, когда вы делаете запрос, хотите ли вы список пользователей или нет.
case class Test(@Key("_id") id = new ObjectId, name: String, users: List[User] = Nil)
Вы можете упорствовать пользователей, как вложенные документы внутри тест документа, а затем использовать второй аргумент запроса, реф, чтобы исключить (0) или включать в себя (1) поля в объекте.
TestDAO.find(/* query */, MongoDBObject("users" -> 0))
Другая стратегия вспыхнуть документы пользователя в коллекцию детской - см https://github.com/novus/salat/wiki/ChildCollection для получения дополнительной информации. В этом примере Test
является «родителем», а User
является «дочерним».
Стратегия заключается в том, что в родительском DAO при сохранении вы переопределяете методы сохранения для сохранения пользователей с использованием дочернего DAO, а затем сохраняете родительский объект с users
, установленным на Nil
.
Затем, по умолчанию, экземпляр Test
извлекается с помощью users
, установленного в Nil.
Если вы хотите получить Test
с users
, вам нужно будет добавить метод поиска для вашего DAO, который вручную:
- найти тестовый документ
- использовать
_id
поле тестового документа для запроса для пользовательских документов родительского ид - это даст List[User]
- десериализации тестовый документ к экземпляру
Test
с помощью grater[Test]
и скопировать его в список пользователей