懒惰的收藏在游戏沙拉



是否可以使用 Sala 延迟加载集合?

例如,

我有一个对象,例如

示例 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()
}

如何在没有用户列表的情况下加载第一个示例中的对象?或者:如何在第二个示例中加载用户列表?

提前感谢!

萨拉特的作者在这里。

Salat 没有像 ORM 延迟加载这样的东西。@Persist注解旨在将字段保留在构造函数之外,但禁止反序列化,因为只有构造函数中的字段才会反序列化。

但是,在进行查询时,您可以轻松决定是否需要用户列表。

case class Test(@Key("_id") id = new ObjectId, name: String, users: List[User] = Nil) 

可以将用户保留为测试文档中嵌入文档,然后使用查询的第二个参数 ref 在对象中排除 (0) 或包含 (1) 字段。

TestDAO.find(/* query */, MongoDBObject("users" -> 0))

另一种策略是将用户文档分解为子集合 - 有关详细信息,请参阅 https://github.com/novus/salat/wiki/ChildCollection。 在此示例中,Test是"父项",User是"子项"。

那里的策略是,在父 DAO 中,在保存时,您覆盖保存方法以使用子 DAO 保存用户,然后保存父对象,users设置为 Nil

然后,默认情况下,检索Test实例,users设置为 Nil。

如果你想用users检索Test,你需要在你的DAO中添加一个手动的find方法:

  1. 查找测试文档
  2. 使用测试文档的 _id 字段按父 ID 查询用户文档 - 这将产生List[User]
  3. 使用 grater[Test] 将测试文档反序列化为Test实例,并将其与用户列表一起复制

相关内容

  • 没有找到相关文章

最新更新