当前位置: 首页 > 知识库问答 >
问题:

为什么我不在每个延迟加载的关系上使用@BatchSize?

岳玉书
2023-03-14

hibernate的@BatchSize注释允许批量获取延迟加载的实体。例如,如果我有类似的东西:

public class Product {


    @OneToMany(fetchType=LAZY)
    @BatchSize(size=10)
    private ProductCategory category;

}

现在,如果我得到一个产品的类别,Hibernate将获取多达10个处于当前会话中且尚未初始化其类别字段的产品的类别。这节省了大量对数据库的SQL调用。到目前为止还不错。现在我想知道为什么我不会在每个延迟加载关系上使用@BatchSize注释?毕竟,我为什么要对数据库进行额外的调用?这显然是有原因的,否则Hibernate的人可能会将其设为默认值,但我目前看不到它。

共有2个答案

萧心水
2023-03-14

为什么我不在每个延迟加载的关系上使用@BatchSize注释?

因为这是您可能不需要在每种情况下进行的优化。当您的应用程序要为许多不同的产品访问product.category时,这样的批处理很有用,因此您可以从类别中选择一个...查询执行,而不是其中的N个。

但是,如果您的应用程序为一个产品实例访问product.category时,不太可能访问同一会话中其他产品实例的类别字段怎么办?如果您为该关联启用了@BatchSize,那么您只是将许多其他类别实例加载到会话中而没有任何收益-它们永远不会被使用。

宰父淳
2023-03-14

我不会直接回答你的问题,但我会回答一个更一般的问题,可能是“我已经找到了对我来说更快的方法,为什么不把它应用到任何地方呢?”

简单的回答是:你不应该做先发制人的优化。

hibernate是一个很好的ORM,可以进行各种优化。您应该测量导致问题的所有流程(经典的N1,即使它很快,任何缓慢的流程,等等),并优化以解决问题。

您可能会通过急于加载某些属性来获得更好的性能,因为您总是使用它们,对于其他一些属性,您可能需要100的BatchSize,因为您知道它与您对该属性的关系数有关。

归根结底,你不应该关心优化,除非你需要关心它。当你完成测量并发现问题时,你需要关心。

 类似资料:
  • 问题内容: hibernate的@BatchSize批注允许批量读取延迟加载的实体。例如,如果我得到类似的东西: 现在,如果我得到产品的类别,则Hibernate将获取当前会话中尚未初始化其类别字段的最多十个产品的类别。这样可以节省大量对数据库的SQL调用。到目前为止,一切都很好。现在我想知道 为什么我不对每个延迟加载的关系都使用@BatchSize注释? 毕竟,为什么我要对数据库进行额外的调用?

  • 我知道什么是DTO:一个在进程之间传输数据以减少方法调用数量的对象。我知道什么是hibernate中的延迟加载。 我在《JHipster的全栈开发》一书中读到这样一句话:JHipster在服务器端使用DTO(数据传输对象)和VM(视图模型)。DTO用于将数据从服务层传输到资源层。它们打破了Hibernate事务,避免了资源层触发进一步的延迟加载。 我不明白DTO和延迟加载之间的关系。

  • 1、mybatis 是否支持延迟加载? 延迟加载其实就是讲数据加载时机推迟,比如推迟嵌套查询的时机。 延迟加载可以实现先查询主表,按需实时做关联查询,返回关联表结果集,一定程度上提高了效率。 mybatis仅支持关联对象association和关联集合对象collection的延迟加载,association是一对一,collection是一对多查询,在mybatis配置文件中可以配置lazylo

  • 问题内容: 什么是Java的延迟加载?我不明白这个过程。有人可以帮助我了解延迟加载的过程吗? 问题答案: 假设您有一个父母,而那个父母有很多孩子。Hibernate现在可以“延迟加载”子级,这意味着它在加载父级时实际上并不会加载所有子级。而是在要求时加载它们。您可以显式地请求此请求,或者,更常见的是,当您尝试访问孩子时,hibernate会自动加载它们。 延迟加载可以帮助显着提高性能,因为通常您不

  • 问题内容: Java中的延迟加载是什么?我不明白这个过程。有人可以帮助我了解延迟加载的过程吗? 问题答案: 假设你有一个父母,而那个父母有很多孩子。Hibernate现在可以“延迟加载”子级,这意味着在加载父级时,它实际上并未加载所有子级。而是在要求时加载它们。你可以显式地请求此请求,也可以是更常见的情况,当你尝试访问孩子时,hibernate会自动加载它们。 延迟加载可以帮助显着提高性能,因为通

  • 本文向大家介绍关于延迟加载JavaScript,包括了关于延迟加载JavaScript的使用技巧和注意事项,需要的朋友参考一下 JavaScript的延迟加载是那些在web上,能让你想抓狂地去寻找解决方案的问题之一。 很多人说“那就用defer”或“async”,甚至有些人说“那就将你的javascript代码放在页面代码底部”。 上述方法都不能解决在web页面完全加载后,再加载外部js的问题。上