是否可以加载一个懒惰的集合?
e.g。我有一个像
这样的对象示例1(在这种情况下,在检索对象时加载整个用户列表)
case class Test(
@Key("_id") _id: ObjectId = new ObjectId,
name: String,
users: List[User]) {
}
或示例2(加载对象时没有列表,但不知道如何获取用户列表)
case class Test(
@Key("_id") _id: ObjectId = new ObjectId,
name: String) {
@Persist val users: List[User] = List()
}
如何在没有用户列表的情况下加载第一个示例中的对象? 或者:如何在第二个示例中加载用户列表?
提前致谢!
答案 0 :(得分:1)
Salat作者在这里。
Salat没有像ORM懒加载的东西。 @Persist
注释用于保存构造函数的外部,但是禁止反序列化,因为只有构造函数中的字段才会被反序列化。
但您可以轻松决定何时进行查询是否需要用户列表。
case class Test(@Key("_id") id = new ObjectId, name: String, users: List[User] = Nil)
您可以将用户作为嵌入式文档保留在测试文档中,然后使用查询的第二个参数ref来排除对象中的(0)或include(1)字段
TestDAO.find(/* query */, MongoDBObject("users" -> 0))
另一个策略是将用户文档分解为子集合 - 有关详细信息,请参阅https://github.com/novus/salat/wiki/ChildCollection。在此示例中,Test
是“父级”,User
是“子级”。
在父DAO中,策略是在保存时,覆盖保存方法以使用子DAO保存用户,然后将users
设置为Nil
的父对象保存。 / p>
然后,默认情况下,检索Test
实例,users
设置为Nil。
如果您想使用Test
检索users
,则需要手动为DAO添加一个find方法:
_id
字段按父ID查询用户文档 - 这将产生List[User]
Test
将测试文档反序列化为grater[Test]
的实例,并将其与用户列表一起复制