在 Hibernate 中运行时急切加载整个对象图

2024-01-30

在说出“指定查询中的获取类型”之类的内容之前,请先阅读以下内容。那不是我所追求的。

我正在寻找一种方法来急切加载完整的对象图(对象+它的所有子对象以及它们的所有子对象等等)。

I do not想要枚举要加载的所有属性。直到运行时我才认识它们。

N+1 查询不是问题。但在这个神奇的操作结束时,我不希望在我的图中留下单个代理或惰性集合。

应该可以编写一些代码来反思性地、递归地查看所有属性。但集合让这变得尴尬和复杂。

有些人推荐使用 Dozer 来做这种事情,但这似乎有点过分,所以我想把它留作最后的手段。


一个简单的解决方案是指定lazy="false"对于所有集合(1:N 和 N:M)和关联 (1:1)。

这会将整个图加载到内存中每笔交易。因此,为了使其正常工作,您最多应该有一笔交易,否则会非常非常严重地损害性能。

虽然这可以满足您的要求,但成本可能太高。请注意,您可以使用“获取配置文件”在运行时选择不同的策略,但当您请求对象时,Hibernate 总是为您提供一个副本供您使用,因此它每次都必须复制图表。

对我来说,这听起来 Hibernate 根本不是完成这项任务的工具。使用 Hibernate 映射实体很方便,但代价是 Hibernate 会泄漏到您的模型和业务代码中。如果 Hibernate 施加的限制不符合您的要求,那么您应该寻找其他地方。

也许你可以和Record类型而不是完全充实的 Java bean。如果是这样,那么你可以看看jOOQ http://www.jooq.org/ or 实现“活动记录”模式的框架 https://stackoverflow.com/questions/610590/is-there-a-java-implementation-of-the-activerecord-pattern-that-is-built-on-top.

如果您需要 beans 并且不限于某种类型的数据库,请尝试 OO 数据库,例如db4o http://www.db4o.com/.

最后,为什么要使用 SQL?如果您始终需要整个对象图,为什么不简单地将其序列化到文件并在启动时加载它呢?或者使用一个内存驻留数据库 http://www.edval.biz/memory-resident-programming-object-databases.

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

在 Hibernate 中运行时急切加载整个对象图 的相关文章

随机推荐

  • XDebug 无法在 VScode 中进行 php 调试

    即使在所有配置之后 使用 xdebug 和 xampp 在 vscode 中进行 PHP 调试也无法正常工作 这是我的 php ini 文件配置 zend extension D Xampp php ext php xdebug 3 0 0
  • CakePHP 中页面别名的自动路由

    我正在使用 CakePHP 框架创建一个 CMS 通过 CMS 创建的每个页面都将有其唯一的 URL 别名 这还取决于虚拟文件夹结构 例如 www site com level 1 about us www site com level 2
  • 如何让 async/await 等待 Observable 返回

    对 Angular 相当陌生 并且在 Promises Observables 和 async await 方面遇到困难 我有一个功能需要当前用户详细信息来执行某些任务 为此 我编写了一个获取用户详细信息方法 该方法返回一个承诺 并且任务在
  • 来自 Pivot 的 Seaborn 热图中的数据顺序

    所以我有一个使用seaborn创建的热图 revels rd pivot Flavour Packet number Contents ax sns heatmap revels annot True fmt d linewidths 0
  • 为购物车项目和产品设置正确的 jpa 映射

    我正在通过一些例子学习jpa 涉及购物车和购物车物品 我将它们定义如下 但不太确定要使用哪个映射 Entity class Product private Long id private String name Entity class C
  • 如何在 Facebook 应用程序中添加画布和安全画布 URL

    我正在尝试开发 Facebook 教程 Friends Smash 但我遇到了一个大问题 它没有显示任何添加画布和安全画布 URL 的选项 设置 gt gt 添加平台 gt gt 网站 我得到以下选项 如何添加画布和安全画布 URL 画布和
  • 如何使用解析表证明左递归语法不在LL(1)中

    我有一个语法 想证明它不在 LL 1 中 S gt SA A A gt a 由于它是左递归语法 为了找到第一个和后续集合 我消除了左递归并得到 S gt AS S gt AS Empty A gt a first of A a follow
  • 将 DAO 与复合对象一起使用

    我正在尝试重写一堆 DAO 这里的设置是 仅纯 JDBC 无 JPA ORM 任何形式 没有使用任何接口 插入对象之前进行大量检查 业务对象紧密相连 我的主要问题是 如何持久 检索由多个其他对象组成的业务对象 例如我的 CustomerDA
  • NGRX - 如何计算商店中商品的属性

    我们在 Angular 应用程序中使用 NGRX 数据来自 API 某些属性以未格式化的字符串形式来自 API 因此我们需要对其进行格式化 当然 这可以在 HTML 中完成 但问题是在 HTML 和 TypeScript 中的多个位置都需要
  • ZF2 - 使用导航视图助手的多个导航菜单

    我正在尝试将主导航与子菜单结合使用以进行更具体的导航 In my layout我这样调用视图助手 this gt navigation main navigation gt menu 并在我的view我这样称呼它 this gt navig
  • 访问 Spark RDD 时闭包中局部变量的使用

    我有一个关于访问 Spark RDD 时闭包中局部变量的使用的问题 我想解决的问题如下 我有一个应该读入 RDD 的文本文件列表 但是 首先我需要向从单个文本文件创建的 RDD 添加附加信息 此附加信息是从文件名中提取的 然后 使用 uni
  • 将 ShapeRenderer.begin/end 嵌套在 SpriteBatch.begin/end 中

    是否可以使用绘制形状ShapeRenderer之间SpriteBatch begin and end calls 我已经尝试过 但没有结果 只绘制了 SpriteBatch 纹理 场景中没有形状 示例代码如下 shapeRenderer b
  • Objective-C 接口 - 声明变量与仅声明属性?

    在 Obj c 中 在 interface 中声明变量时 接口 NSObject 我的对象 我的对象 property 不安全 非原子 MyObject myObject 对比 仅将其声明为属性 接口 NSObject property 不
  • 通过 HTTP 回调函数进行 Google 地理编码?

    我想使用谷歌地理编码via HTTP在我的 AJAX Web 应用程序中将城市名称转换为经度和纬度的功能 但是 HTTP 地理编码器功能似乎不存在回调函数 http code google com apis maps documentati
  • 无法将操作提供者强制转换为共享操作提供者

    下面是我的活动的代码 import android app Activity import android os Bundle import android support v7 widget ShareActionProvider imp
  • Clojure 协议与 Scala 结构类型

    看完后里奇 希基的采访 http www infoq com interviews hickey clojure protocols on 协议 http clojure org protocols在 Clojure 1 2 中 对 Clo
  • 线程无异常地死亡

    我的一些工作线程遇到问题 我在线程的 run 方法中添加了一个包罗万象的异常语句 如下所示 try Runs the worker process which is a state machine while self set exitco
  • 为什么 ListView 项目不会增长以包裹其内容?

    我有一个相当复杂的 ListView 具有可变的列表项高度 在某些情况下 我需要在列表项中显示一个附加视图 该视图默认是隐藏的 View GONE 通过启用它 View VISIBLE 列表项的高度会增加 或者至少应该如此 问题 即使我将项
  • 如何将文件夹结构复制到另一个目录下?

    我有一些与复制文件夹结构相关的问题 事实上 我需要将pdf文件转换为文本文件 因此 我导入 pdf 的位置有这样的文件夹结构 D f subfolder1 subfolder2 a pdf 我想在 下创建确切的文件夹结构D g subfol
  • 在 Hibernate 中运行时急切加载整个对象图

    在说出 指定查询中的获取类型 之类的内容之前 请先阅读以下内容 那不是我所追求的 我正在寻找一种方法来急切加载完整的对象图 对象 它的所有子对象以及它们的所有子对象等等 I do not想要枚举要加载的所有属性 直到运行时我才认识它们 N