当前位置: 首页 > 面试题库 >

何时在休眠状态下使用延迟加载/急切加载?

宿洋
2023-03-14
问题内容

我相信只有两种使用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)一个查询,它在需要的情况下加载客户和所有订单信息它。因此,在这种情况下,我将忽略默认映射。

有了这两个查询之后,在我的服务层中,我就拥有了根据情况来做正确的事情所需的工具。



 类似资料:
  • 问题内容: 我相信只有两种使用Hibernate加载对象的方法,即延迟加载和一种渴望加载。延迟加载有其自身的优势,它不会加载很多对象,而只是在需要时才加载它们。我还了解到,如果您想强制为一个对象加载所有子代,则只需调用即可。假设我们有以下对象 假设我们有一些客户在我们的系统中有订单,并且该订单可能不止一个甚至为空。所以我的问题是,在这种情况下始终使用渴望加载会更好吗?我们需要与客户相关的订单的大小

  • 问题内容: 我遇到了一个问题,JPA试图在我不想要的时候延迟加载我的数据。从本质上讲,正在发生的事情是我正在使用Service检索一些数据,并且当我将这些数据解析为JSON时,JSON库正在触发hibernate模式以尝试懒惰地加载数据。有什么办法可以阻止这种情况?我在下面给出一个例子。 是否可以将JPA /hibernate设置为不尝试并延迟加载数据? 更新: 我意识到您可以使用FetchTyp

  • 问题内容: 我遇到了 一个 问题,即 一对一的延迟加载 在hibernate状态下不起作用。我 已经解决了它 ,但仍然 无法 正确 理解 会发生什么。 我的代码( 延迟加载在这里不起作用 ,当我拉人时-地址也被获取): 但是 :如果我添加 OneToOne关系,则延迟加载 效果很好 ! 问题/完整性: 请向我解释注释如何帮助实现延迟加载。 PS 我已经阅读了post1和post2的帖子,并了解了为

  • 问题内容: 我正在使用Spring事务,因此当POJO到DTO转换时,该事务仍然处于活动状态。 我想防止Dozer触发延迟加载,以使隐藏的sql查询永远不会发生:所有获取都必须通过HQL显式完成(以获得对性能的最佳控制)。 这是一个好习惯吗(我在任何地方都找不到它)? 如何安全地做? 我在DTO转换之前尝试了这个: 我不知道事务会发生什么,但是Hibernate会话不会关闭,并且仍然会发生延迟加载

  • 问题内容: 我的多对一映射存在性能问题。当我在日志文件中调试SQL查询时,可以进行主体查询,但是在我有其他表示多对一对象映射的查询之后。 Entity.hbm.xml: Object1.hbm.xml: Object2.hbm.xml: 查询HBM: 在pom.xml中 问题答案: 您是否尝试过像这样的FetchMode.SELECT?

  • 问题内容: 什么和何时在休眠状态下使用DiscriminatorValue注释的最佳方案是什么? 问题答案: 这两个链接帮助我最了解继承概念: http://docs.oracle.com/javaee/6/tutorial/doc/bnbqn.html http://www.javaworld.com/javaworld/jw-01-2008/jw-01-jpa1.html?page=6 要了解