何时在休眠中使用延迟加载/预加载?

2023-11-26

我相信使用 Hibernate 加载对象只有两种方法,一种是延迟加载,一种是预先加载。延迟加载有其自身的优点,它不是加载大量对象,而是仅在需要时才加载。我还了解到,如果您想强制加载一个对象的所有子对象,您可以简单地调用parent.getChildren().size()。假设我们有以下对象

@Entity
public class Customer{
public Set<Order> order;
}

@Entity
public class Order{
}

假设我们的系统中有客户的订单,并且订单可能不止一个,甚至为空。所以我的问题是在这种情况下总是使用急切加载不是更好吗?我们需要与客户相关的订单的尺寸或一些信息。在这种情况下使用延迟加载有什么好处,有什么好处吗?

我试图了解在哪里使用延迟加载以及在哪里使用急切加载,非常感谢您的见解。


我试图了解在哪里使用延迟加载以及在哪里使用 急于加载,高度赞赏您的洞察力。

以下是一些想法:

1)如果你总是要使用某些东西(当然),你可以立即加载它。
2)与1相关,如果你几乎永远不会使用某些东西,请延迟加载它。
3)当涉及大型集合时,延迟加载往往更有用。
4) 提前加载内容将减少与会话相关的错误,但可能会降低性能。
5) 对于复杂的数据模型和/或大型数据库,您将了解您的应用程序在负载下的表现并调整您的策略。
6) 第一次就做好是很困难的。做感觉正确的事情,必要时不要害怕改变。
7) 对于大型数据集,无论如何,您可能最终都会编写自定义 hql/查询,其中默认映射可以被覆盖,因此惰性与急切并不那么重要。

如果你相信#6,那么就不要试图制定太远的计划,并在必要时改变它。

关于您的具体示例,我可能会编写一堆查询来访问数据(当然,由适当的业务需求驱动)

1)加载客户并将订单保留在数据库中(如此延迟加载)的查询,当我需要获取客户信息时我会调用该查询
2)在我需要的情况下加载客户和所有订单信息的查询。所以在这种情况下我将忽略默认映射。

有了这两个查询,在我的服务层中,我就拥有了根据情况上下文执行正确操作所需的工具。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

何时在休眠中使用延迟加载/预加载? 的相关文章

  • 将 jar 作为 Linux 服务运行 - init.d 脚本在启动应用程序时卡住

    我目前正在致力于在 Linux VM 上实现一个可运行的 jar 作为后台服务 我已经使用了找到的例子here https gist github com shirish4you 5089019作为工作的基础 并将 start 方法修改为
  • 如何使用 SimpleDateFormat 解析多种格式的日期

    我正在尝试解析文档中的一些日期 用户似乎以类似但不完全相同的格式输入了这些日期 以下是格式 9 09 9 2009 09 2009 9 1 2009 9 1 2009 尝试解析所有这些内容的最佳方法是什么 这些似乎是最常见的 但我想让我困扰
  • Grails 2.3.0 自动重新加载不起作用

    我最近将我们的项目升级到 grails 2 3 0 一切工作正常 除了每当我更改代码时自动重新加载都无法工作的问题 这包括所有项目工件 控制器 域 服务 gsps css 和 javascript 文件 我的旧版本 grails 可以正常工
  • 如何从秘密字符串中制作 HMAC_SHA256 密钥以在 jose4j 中与 JWT 一起使用?

    我想生成 JWT 并使用 HMAC SHA256 对其进行签名 对于该任务我必须使用jose4j https bitbucket org b c jose4j wiki Home 我尝试根据秘密生成密钥 SecretKeySpec key
  • Spring安全“记住我”cookie在第一个请求中不可用

    我无法在登录请求后检索 Spring 记住我 cookie 但它在对受保护页面的下一个请求中工作正常 谁能告诉我怎样才能立即得到它 我在登录请求中设置了记住我的 cookie 但在 Spring 重定向回原始 受保护的 url 后无法检索它
  • 在文本文件中搜索单词并返回其频率

    如何在包含单词文本的文本文件中搜索特定单词并返回其频率或出现次数 使用扫描仪 String text Question how to search for a particular word in a text file containin
  • 如果使用的 JVM 是 x86 或 x64,则以不同的方式解决 Maven 依赖关系?

    我设置了一个 Maven 存储库来托管一些 dll 但我需要我的 Maven 项目根据使用的 JVM 是 x86 还是 x64 下载不同的 dll 例如 在运行 x86 版本 JVM 的计算机上 我需要从存储库下载 ABC dll 作为依赖
  • 如何让spring为JdbcMetadataStore创建相应的schema?

    我想使用此处描述的 jdbc 元数据存储 https docs spring io spring integration docs 5 2 0 BUILD SNAPSHOT reference html jdbc html jdbc met
  • 如何在android中设置多个闹钟,在这种情况下最后一个闹钟会覆盖以前的闹钟

    我正在开发一个Android应用程序 用户可以在其中设置提醒时间 但我在以下代码中遇到一个问题 即最后一个警报会覆盖之前的所有警报 MainActivity java public void setreminders DatabaseHan
  • 如何将 android.net.Uri 转换为 java.net.URL? [复制]

    这个问题在这里已经有答案了 有没有办法从Uri to URL 我正在使用的库需要这个 它only接受一个URL但我需要在我的设备上使用图像 如果该方案的Uri is http or https new URL uri toString 应该
  • Java 服务器-客户端 readLine() 方法

    我有一个客户端类和一个服务器类 如果客户端向服务器发送消息 服务器会将响应发送回客户端 然后客户端将打印它收到的所有消息 例如 如果客户端向服务器发送 A 则服务器将向客户端发送响应 1111 所以我在客户端类中使用 readLine 从服
  • 计算日期之间的天数差异

    在我的代码中 日期之间的差异是错误的 因为它应该是 38 天而不是 8 天 我该如何修复 package random04diferencadata import java text ParseException import java t
  • 为什么java中的for-each循环中需要声明变量

    for 每个循环的通常形式是这样的 for Foo bar bars bar doThings 但如果我想保留 bar 直到循环结束 我可以not使用 foreach 循环 Foo bar null Syntax error on toke
  • 对象锁定私有类成员 - 最佳实践? (爪哇)

    I asked 类似的问题 https stackoverflow com questions 10548066 multiple object locks in java前几天 但对回复不满意 主要是因为我提供的代码存在一些人们关注的问题
  • 如何在 Quartz 调度程序中每 25 秒运行一次?

    我正在使用 Java 的 Quartz Scheduling API 你能帮我使用 cron 表达式每 25 秒运行一次吗 这只是一个延迟 它不必总是从第 0 秒开始 例如 序列如下 0 00 0 25 0 50 1 15 1 40 2 0
  • 如何在Java中正确删除数组[重复]

    这个问题在这里已经有答案了 我刚接触 Java 4 天 从我搜索过的教程来看 讲师们花费了大量精力来解释如何分配二维数组 例如 如下所示 Foo fooArray new Foo 2 3 但我还没有找到任何解释如何删除它们的信息 从内存的情
  • Android - 9 补丁

    我正在尝试使用 9 块图片创建一个新的微调器背景 我尝试了很多方法来获得完美的图像 但都失败了 s Here is my 9 patch 当我用Draw 9 patch模拟时 内容看起来不错 但是带有箭头的部分没有显示 或者当它显示时 这部
  • Android AutoCompleteTextView 带芯片

    我不确定我是否使用了正确的词语来描述此 UI 功能 但我已附上我希望在我的应用程序中实现的目标的快照 它由 Go SMS 使用 用户在编辑文本中键入联系人 在用户从完成下拉列表中选择联系人后 该联系人将被插入到编辑文本中 如附图所示 编辑文
  • 在android中跟踪FTP上传数据?

    我有一个运行 Android 的 FTP 系统 但我希望能够在上传时跟踪字节 这样我就可以在上传过程中更新进度条 安卓可以实现这个功能吗 现在 我正在使用org apache common net ftp我正在使用的代码如下 另外 我在 A
  • 嵌入式 Jetty - 以编程方式添加基于表单的身份验证

    有没有一种方法可以按如下方式以编程方式添加基于表单的身份验证 我用的是我自己的LdapLoginModule 最初我使用基本身份验证并且工作正常 但现在我想在登录页面上进行更多控制 例如显示徽标等 有没有好的样品 我正在使用嵌入式 jett

随机推荐

  • 用于长时间运行测试的 testthat 模式

    我有一堆测试 我不希望它们在 CRAN 检查或 Travis CI 构建期间运行 它们要么是长时间运行的 要么可能导致写入网络数据库的事务 并发冲突 哪种分离它们的方法 与 R CMD 检查测试 最适合testthat 我应该将这些测试放在
  • 实体框架CTP5 - 如何调用存储过程?

    这可能是一个简单的答案 但我看不到如何使用 EF CTP5 执行存储过程 在实体框架 4 0 中 我们这样做了 ExecuteFunction ContainerName StoredProcName new ObjectParameter
  • 当列名包含空格和特殊字符时从 data.table 包中读取?

    我有一个 csv 文件 其中列名称包含空格和特殊字符 fread用引号导入它们 但我怎样才能改变这种行为 原因之一是我的列名以空格开头 但我不知道如何处理它们 任何指示都会有帮助 编辑 一个例子 gt packageVersion data
  • iOS下拉视图[关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 目前不接受答案 我一直在寻找下拉视图 展开和折叠视图 当用户单击它或折叠时基本上会展开 下拉列表基本上用于包含文本视图 文本字段 到目前为止 我无法找到如何创建这个
  • python中csv.writer的制表符'\t'的分隔符

    我想将字典写入 csv 中 如下形式 column1 column2 aaa 1 bbb 2 但是当我在以下代码中使用 t 作为分隔符时 import csv csv filename test csv dict aaa 1 bbb 2 w
  • Playframework:[RuntimeException:java.lang.reflect.InitationTargetException]

    我正在尝试基于 Zentask 示例创建一个简单的登录 zentask playframework 但是当我单击调用 Application authenticate 操作的登录按钮时 它会给出运行时异常 我已用 error 标记了该行 R
  • C++17/C++2a 中编译时的哈希类型

    考虑以下代码 include
  • 我可以在 XML 中绘制矩形吗?

    我想知道是否可以在 XML 中绘制矩形 我知道如何以编程方式使用drawRect方法进行绘制 是的 你可以 这是我之前做的
  • 在 Nodejs Docker 镜像上运行 Redis

    我有一个 Docker 映像 它是一个 node js 应用程序 该应用程序从本地运行的 Redis 检索一些配置值 正因为如此 我正在尝试在 Docker 映像内的同一容器中安装并运行 Redis 如何扩展 Docker 文件并在其中配置
  • 检测 Visual Studio 2010 中的重复代码

    Clone Detective 是一个在 VS 2008 中查找重复代码的好工具 有没有集成到 VS 2010 中的查找重复代码的工具 克隆侦探看起来并不像正在积极开发中1 2 几周后您似乎没有得到任何答案 暗示没有任何答案完全符合您的要求
  • Android studio 无法添加苹果设备

    我想在 Android studio 中试用 Kotlin Multiplatform Mobile KMM 我已经安装了插件 当我尝试添加 IOS 配置时 没有任何显示 我只有一个 IOS 选项 但当我点击它时什么也没有显示 Androi
  • 如何创建 WPF 组合框平面样式?

    我想为 WPF 组合框创建一个平面样式模板 它看起来像 Visual Studio 2010 中的组合框 此外 我想为此模板使用 Visual Studio 画笔 有人帮我找到路吗 有完整的模板吗 还有人知道有关可以从其他应用程序获取控件模
  • Parse Cloud 中的主密钥是什么?

    有人可以简单地向我解释一下吗master key在解析云代码中 最近实现的 CC 功能 使用主密钥 是否有可能改变其他非 Cloud Code 功能的行为 例如 您有一个正常工作的解决方案 可以让当前用户添加其他PFUser对象到关系中并根
  • 如何在android上实现HTTP服务器

    我在 WIFI 提供的同一个 LAN 上有两个 Android 应用程序 应用程序 A 在端口 8033 上打开侦听套接字 应用程序 B 使用 HttpClient 在端口 8033 上访问 A 如何使 A 可以对 B 执行POST和GET
  • 如何使用 Ruby 处理 UTF-8 电子邮件标头(如主题:)?

    我是一名电子邮件 n00b 但我正在开发一个使用 Unicode 字符发送 HTML 电子邮件的应用程序 正如我的朋友所说的 享受编码地狱 The Subject 标头来自用户输入 因此可能包含 Unicode 字符 一些邮件客户端 如 G
  • 将带后缀的文件大小转换为字节的最简单方法

    标题确实说明了一切 但我目前正在使用一个带有 case 语句的简单函数将人类可读的文件大小字符串转换为以字节为单位的大小 它工作得很好 但移植到其他代码中有点笨拙 所以我很想知道 shell 脚本是否可以使用任何广泛可用的命令 基本上我想获
  • Laravel 5 更改 public_path()

    我正在尝试移动public文件夹到其他地方 但是找不到修改的地方public path 多变的 现在 public path 返回错误的文件夹路径 我可以在哪里设置变量public path 您可以使用 ioc 容器覆盖公共路径 对我来说完
  • 跨多个模型的 Rails 搜索

    我有一个问题 我有一个显示视图 充当仪表板并引入来自其他模型的记录 然后引入与之关联的模型 我有一个简单的搜索表单 可以很好地搜索一个模型 但我不知道如何让它也搜索关联的模型 我认为全文搜索是没有必要的 而且我不确定它会如何工作 因为我不想
  • 带按钮的滚动列表视图

    我想通过按按钮滚动列表视图 我使用上下两个按钮 当我按下向上按钮时 列表视图应该向上移动一行 当我按下向下按钮时 列表视图应该向下移动一行 我的列表视图基于this关联 我找到了滚动视图的一个很好的例子here 现在我的问题是我需要使用列表
  • 何时在休眠中使用延迟加载/预加载?

    我相信使用 Hibernate 加载对象只有两种方法 一种是延迟加载 一种是预先加载 延迟加载有其自身的优点 它不是加载大量对象 而是仅在需要时才加载 我还了解到 如果您想强制加载一个对象的所有子对象 您可以简单地调用parent getC