有人可以解释一下 Ektorp 中的 Cascading 和 FetchType 惰性吗?

2024-03-08

我是 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(使用前将#替换为@)

有人可以解释一下 Ektorp 中的 Cascading 和 FetchType 惰性吗? 的相关文章

随机推荐

  • 以编程方式使下载停靠栏图标弹起

    如何以编程方式使 Dock 下载 图标弹起 请注意 我不希望我的应用程序图标弹起 而只希望下载图标弹起 特别是 我正在将文件从我的应用程序下载到 下载 文件夹 这没问题 但我希望下载图标在下载完成时弹起 就像 Safari 完成下载时发生的
  • 通过右值引用返回是否更有效?

    例如 Beta ab Beta toAB const return move Beta ab 1 1 Beta ab Beta toAB const return move Beta ab 1 1 这会返回一个悬空引用 就像左值引用的情况一
  • 多个鼠标/鼠标/光标?

    如何为多个鼠标显示另一个光标 我有两个 TMemo 两个可以输入各自 TMemo 的键盘 2 个鼠标 我需要 2 个光标 如果假设的话 我已经可以检测出哪只老鼠是哪只 我怎样才能让我自己的光标跟着它一起走 使用德尔福 可能沿着多点 http
  • 使用 bootstrap-datepicker 禁用日期范围?

    如何禁用多个日期范围 使用bootstrap datepicker 目前 这是我关于如何专门禁用日期的代码 div class input group input daterange div
  • Linux shell 编程字符串比较语法

    有什么区别 and 在Linux shell编程中比较字符串 也许下面的代码可以工作 if NAME user then echo your name is user fi 但我认为这不是正确的语法 它将用于比较字符串 陈述 什么是正确的
  • webpack --env.product 和 --mode="product" 之间有什么区别

    如果我错了 请纠正我 但据我从文档中了解到 env option https webpack js org guides environment variables 用来ONLY为了能够在webpack config js如果它导出一个函数
  • 插入表视图并添加按钮或空行时最好的是什么?

    当呈现一个简单的表格视图 或者我想甚至是列表视图 时 您输入新数据的首选方法是什么 With add delete buttons like this Or with a blank line indicating a new record
  • UIAlertViewDelegate 方法 didDismissWithButtonIndex 在手机睡眠/锁定时被调用

    我有一个 UIAlertView 它的 didDismissWithButtonIndex 委托方法调用会弹出视图控制器 同一类 它是 AlertView 委托和视图控制器 以使用户返回到上一个屏幕 问题是 当您在 警报显示 之前锁定手机时
  • Docker 化 Spring boot 应用程序以进行 Kubernetes 部署

    我有一个 Spring Boot 应用程序 在我的 application properties 中具有如下一些属性 server ssl keyStore users admin certs appcert jks server ssl
  • 顺时针旋转数组

    我有一个二维数组 需要顺时针旋转 90 度 但是我不断收到 arrayindexoutofbounds public int rotateArray int arr first change the dimensions vertical
  • ASP.NET Core + IIS + SSL

    如果我想在运行 IIS 作为反向代理的 ASP NET Core 应用程序中使用 https 我是否需要在 IIS 或 ASP NET Core 或两者中配置 SSL 证书 我的计划是在 IIS 上安装证书 这够了吗 在 IIS 上安装证书
  • PHP:数组有最大大小吗?

    PHP 中的数组有限制吗 是的 元素的最大数量有限制 哈希表结构 数组基本上是哈希表的包装器 定义如下 PHP 5 3 typedef struct hashtable uint nTableSize uint nTableMask uin
  • Tensorflow 1.9 / 对象检测:model_main.py 仅评估一张图像

    我已更新到 Tensorflow 1 9 和对象检测 API 的最新版本 当运行以前运行良好的训练 评估会话时 我认为版本 1 6 训练似乎按预期进行 但我只获得一个图像 第一个图像 的评估和指标 在 Tensorboard 中 图像标记为
  • 为什么结构体数组比较有不同的结果

    我不知道为什么会发生以下情况 而且我找不到相关的源代码 有人能给我解释一下吗 var s ss struct two empty structs arr1 6 struct s array with empty struct pointer
  • Python/MySQL 查询错误:“未知列”

    该脚本旨在充当命令行前端 将记录添加到本地托管的 MySQL 数据库 我收到此错误 mysql connector errors ProgrammingError 1054 42S22 Unknown column watermelon i
  • 将 64 位数组转换为 Int64 或 ulong C#

    我有一个 int 数组 长度始终为 64 例如 1110000100000110111001000001110010011000110011111100001011100100 我想把它写成一篇Int64 或ulong 变量 怎么做 我尝试
  • Python 中某些坐标处的二维高斯拟合强度

    我有一组坐标 x y z x y 它们描述坐标 x y 处的强度 z 对于不同坐标处的一组强度 我需要拟合一个二维高斯函数来最小化均方误差 数据位于 numpy 矩阵中 对于每个拟合会话 我将有 4 9 16 或 25 个坐标 最终我只需要
  • Chrome 违规:[违规] 处理程序花费了 83 毫秒的运行时间

    我正在尝试在我的项目中实现 Facebook 的注销功能 登录效果很好 但我面临着在 JavaScript 控制台中使用注销代码获取以下消息 违规 长时间运行的 JavaScript 任务花费了 318 毫秒 session php 51
  • Gradle 跳过 jacoco 覆盖率插件

    我知道在 stackexchange 上有很多类似的问题 但这让我发疯 任何其他答案都没有帮助我 我几乎使用了我能找到的所有 gradle 强制标志 我的 Gradle 版本是 2 2 1 我的构建 gradle buildscript e
  • 有人可以解释一下 Ektorp 中的 Cascading 和 FetchType 惰性吗?

    我是 CouchDB 和 Ektorp 的新手 实际上我今天就开始尝试使用它 我找到的帮助我入门的最详细的文档是这个 http www ektorp org reference documentation html d100e394 htt