我还没有使用Morphia,但我正考虑将其用于当前项目。
假设我有一个带有许多@Reference注释的POJO,我要求Morphia从数据库中获取对象图。如果我再调用另一个DAO或DataStore并要求Morphia获取一些已在第一个图中实例化的对象,那么Morphia会返回对已经实例化的对象的引用还是会创建一个新实例?
如果Morphia每次都返回一个新的对象实例,是否有人建议如何最好地创建一个不会复制已经实例化的对象的Morphia支持的存储库?
答案 0 :(得分:3)
正如我在Morphia看到的那样,它将重新阅读每一个参考文献。 这是问题之一,为什么我创建了Morphium。我在那里集成了一个缓存层,所以如果你读了一个引用,就不会再读这个了(至少,如果按ID搜索...)
答案 1 :(得分:1)
我们在生产中使用morphia,有两种方法可以确保您不加载我们遇到的引用。
一种是在主类中定义@Reference元素时使用延迟加载选项。这当然意味着此行为对该对象是“全局的”。
更好的方法是不使用Morphia定义@Reference,而是自己管理引用。如果您需要代码示例,请告诉我。
答案 2 :(得分:1)
我也停止使用@Reference,而是声明如下:
ObjectId itemId
而不是拥有一个字段项。这有两个好处:(1)它允许我通过帮助器getObject(...)方法定义一个getter,我用对象缓存编写它,(2)它在Mongo对象中存储一个简单的ObjectId,而不是一个完整的DBRef。包括集合名称,因此大约是数据大小的两倍。