我是 CouchDB 和 Ektorp 的新手(实际上我今天就开始尝试使用它)。我找到的帮助我入门的最详细的文档是这个:
http://www.ektorp.org/reference_documentation.html#d100e394 http://www.ektorp.org/reference_documentation.html#d100e394
我的用例是,我想将一个非常复杂的类保存为文档(到目前为止我已经做到了),但我不想一直加载所有字段(因为其中一些字段可能是其他更简单的字段的大集合)文件)。
这是我所拥有的一个示例(它只是我用来学习使用 Ektorp 和 CouchDB 的实验类
@JsonSerialize(include = Inclusion.NON_NULL)
public class Player extends CouchDbDocument {
private int xp = 0;
@JsonDeserialize(using = CoinPouchDeserializer.class)
private CoinPouch coins = new CoinPouch(); // subclass of enumMap not
// complex
@DocumentReferences(backReference = "playerId", fetch = FetchType.LAZY, descendingSortOrder = true, orderBy = "itemid")
private Inventory inventory = new Inventory();// subclass of Map<String,
// Item> Items are document
// themselves
}
我设法保存它并通过 id 获取它就好了。但是如何在不加载库存的情况下获得它呢?
我也很感激任何指向其他资源的链接,我应该查看有关开始使用 couchdb 或 ektorp 与 java(或 scala)的信息,干杯。
感谢您提供任何有用的答案。
此类文档引用的作用基本上与 SQL 数据库中的 JOIN 类似,但您无法像使用 SQL 那样在一个请求中执行 JOIN。相反,您需要发出第一个请求以获取您正在查找的核心文档,然后发出第二个请求以获取任何引用的文档。
将 FetchType 设置为 eager 会告诉 Ektorp 在您阅读第一个文档后立即执行此操作,因此会立即对所有引用的文档发出一系列请求,确保在开始使用之前加载所有内容。 FetchType Lazy 不会执行此操作,而是会忽略引用的文档,直到您尝试使用它们为止。
通常,如果您不太可能使用引用的文档,则需要延迟加载。如果你总是要使用它们,那么急切加载是probably更好,因为它至少为您提供了一致的前期加载时间,而不是在过程的后期发出不可预测的请求。听起来你不想在加载播放器时加载库存,所以是的,将 FetchType 设置为惰性应该可以解决这个问题。
同时,级联参数允许您配置如果您对此文档执行操作(更新删除等),引用的文档会发生什么情况。默认情况下,引用的文档需要显式保存或删除,您不能只保存主文档并期望其他文档也被保存。听起来这实际上是您想要的行为(否则保存对播放器的更改将加载然后保存库存,我相信)。
另外,您应该注意,根据文档,您的示例实际上并不有效,因为您只能使用 DocumentReferences 来引用其他文档的 Sets(真正的真正的 Java Set 实现),而您的示例是一个 Map。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)