1

我还没有使用 Morphia,但我正在考虑将它用于当前项目。

假设我有一个带有许多 @Reference 注释的 POJO,并且我要求 Morphia 从数据库中获取对象图。如果我然后进行另一个 DAO 或 DataStore 调用并要求 Morphia 获取一些已经在第一个图中实例化的对象,Morphia 会返回对已经实例化的对象的引用还是会创建一个新实例?

如果 Morphia 每次都返回一个新的对象实例,是否有人建议如何最好地创建一个不会复制已实例化对象的 Morphia 支持的存储库?

4

3 回答 3

3

正如我在 Morphia 中看到的那样,它会重新阅读所有参考资料。这是我创建Morphium的问题之一。我在那里集成了一个缓存层,因此如果您阅读参考,则不会再次阅读此参考(至少,如果您按 ID 搜索...)

于 2012-04-27T06:01:54.643 回答
1

我们在生产中使用吗啡,有两种方法可以确保您不加载引用,这也是我们遇到的问题。

一种是在主类中定义 @Reference 元素时使用延迟加载选项。这当然意味着这种行为对于该对象是“全局的”。

更好的方法是不使用 Morphia 定义 @Reference,而是自己管理引用。如果您需要代码示例,请告诉我。

于 2012-05-09T22:19:05.727 回答
1

我也停止使用@Reference,而是声明如下:

 ObjectId itemId

而不是有一个字段项。这有两个好处:(1)它允许我通过我用对象缓存编写的帮助器 getObject(...) 方法定义一个 getter;(2)它在 Mongo 对象中存储一个简单的 ObjectId 而不是完整的 DBRef包括集合名称,因此大约是数据大小的两倍。

于 2012-06-10T20:59:07.760 回答