情况是这样的:

  • 你有一个带有对象图的Hibernate上下文,它定义了一些延迟加载。
  • 您希望在UI中使用Hibernate对象,而无需在某处复制数据。
  • 有不同的UI上下文需要不同数量的数据。
  • 数据太大,无法每次都加载整个图表。

以可配置的方式加载对象图中所有适当对象的最佳方法是什么,以便可以访问它们而无需返回数据库来加载更多数据?

任何帮助。

===============>>#1 票数:2 已采纳

假设您拥有客户,并且在某一时刻您必须处理他的订单,并且他可能会为他的订单获得奖金。

然后我会定义一个具有流畅界面的存储库,这将允许我说出类似的内容:

new ClientRepo().LoadClientBy(id)
                .WithOrders()
                .WithBonus()
                .OrderByName();

在那里,您可以为客户提供所需的一切。 最好事先知道当前操作需要什么。 通过这种方式,您可以避免不必要的数据库访问。(团队中的新开发人员通常会执行此操作 - 调用属性,而不是意识到它实际上是对数据库的调用)

===============>>#2 票数:1

如果它是一个webapp而你正在使用Spring,那么OpenSessionInViewFilter可以解决你的问题。

===============>>#3 票数:1

我们在项目中使用的方法是为您拥有的每个视图创建服务。 然后,视图将获取此特定视图所需的子图,并始终尝试减少发送到数据库的sqls数。 因此,我们使用大量连接来获取n:1关联对象。

如果您使用的是直接连接到数据库的2层桌面应用程序,则可以随时保留附加的对象并随时加载其他数据。 否则,您必须将其重新连接到会话并使用Hibernate.initialize(Object entity, String propertyName)初始化所需的关联。

(内存不足,可能不是100%正确)

  ask by Peter Kelley translate from so

未解决问题?本站智能推荐:

1回复

深度对象图休眠

我们的领域模型非常紧密地耦合在一起,并且使用hibernate映射的某些类深达6个集合。 当前,我们不使用延迟加载,因为业务层会传递一些较高级别的类,并会在会话关闭时检索其较低级别的子级。 检索大量数据以填充此对象图似乎很昂贵,并且我对域模型是否正确表示怀疑-也许我们应该减小深度并增加DAO
4回复

使用JPA / Hibernate保留大型对象图时发生异常

我们正在创建一个由JPA支持的新Web应用程序,以替换旧的Web应用程序。 作为迁移的一部分,我们正在将旧应用程序的数据库转换为新的,更复杂的,由JPA管理的数据库。 因此,我编写了一个“脚本”,将旧数据库转换为一组JPA实体,然后保存它们。 它是这样的: 根据域模型的依赖关
1回复

加载没有N + 1 Cartesian Product with JPA和Hibernate的递归对象图

将项目从Ibatis转换为JPA 2.1时,我遇到了一个问题,我必须为一组对象加载一个完整的对象图,而不是出于性能原因而没有按N + 1选择或使用笛卡尔积。 用户查询将产生List <Task>,我需要确保在返回任务时,它们已填充所有属性,包括父 , 子 , 依赖项和属性 。
2回复

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

请在继续说“查询查询中的提取类型”之前阅读。 那不是我追求的。 我正在寻找一种方法来急切加载一个完整的对象图(对象+所有子对象及其所有子对象等)。 我不想枚举要加载的所有属性。 直到运行时我才知道它们。 N + 1个查询不是问题。 但是在这个神奇的操作结束时,我不希望在我
1回复

使用JPA(hibernate)和简单的oneToMany无法持久保存新的对象图 - ManyToOne关系

我试图通过jpa持久化/合并一个全新的对象图,但似乎持久性的顺序是不正确的,因为它试图保存对其父项存在约束的子对象。 和 我将创建一个新的实体ObjectA以及几个新的ObjectB实体并将它们添加到对象A.当我合并ObjectA时,我得到以下内容: 我错过了什么或做错了
1回复

休眠什么是加载对象图的正确方法

假设我有3张桌子GrandCat,Cat和Kitt。 他们有一对多的关系,所以我有以下课程。 所有关联都是延迟加载。 我要建立一个grandCat清单。 条件是大龄> 10,大龄> 5,并且至少有一只小鸡的颜色是黄色。 当我执行grandCat.getCats()时,
1回复

休眠:尝试持久化对象图时发生java.lang.StackOverflowError

我在尝试在数据库中保持多对一关系时遇到了麻烦。 我的方法对我来说似乎是合乎逻辑的,但是休眠方式却带有java.lang.StackOverflowError 。 让我说明开始的情况: Account和Person记录已经保留在数据库中,但是Account和Person仍必须通过诸如a
1回复

带有复杂对象图的Hibernate延迟加载

我有一个类似的实体结构 问题是,在获取数据时,休眠模式会为所有延迟加载的Collectio创建代理(持久包)。 我根据用户需求提供数据,但实际上并不能控制用户在单个呼叫中需要多深的数据。 我需要做的是将其他用户没有要求的其他收集袋设为空,如果我不这样做,它将为我提供POGO到DTO转
1回复

未在对象图上调用Hibernate Validator

我有一个模型对象,该对象具有使用休眠验证注释进行注释的实体。 例如,@ NotBlank,@ NotNull,@ Length。 我有一个支持此模型的表单,用于装饰模型对象的实例。 我已经用@ NotNull,@ Valid注释对这个实例进行了注释。 我在Controller类中为此支持
1回复

JPA如何保存OneToMany对象图

当数据库中已经存在多面实体时,JPA如何保存OneToMany对象图。 它是否在“很多”侧查询实体表以查找主键,以便可以将其插入“一个”侧的实体中? 例如员工--- *项目 有一个网页,您需要在其中提供员工详细信息,然后一个接一个地添加项目。 说页面上提供的员工详细信息,并提供和