hibernate的@BatchSize注释允许批量获取延迟加载的实体。例如,如果我有类似的东西:
public class Product {
@OneToMany(fetchType=LAZY)
@BatchSize(size=10)
private ProductCategory category;
}
现在,如果我得到一个产品的类别,Hibernate将获取多达10个处于当前会话中且尚未初始化其类别字段的产品的类别。这节省了大量对数据库的SQL调用。到目前为止还不错。现在我想知道为什么我不会在每个延迟加载关系上使用@BatchSize注释?毕竟,我为什么要对数据库进行额外的调用?这显然是有原因的,否则Hibernate的人可能会将其设为默认值,但我目前看不到它。
为什么我不在每个延迟加载的关系上使用@BatchSize注释?
因为这是您可能不需要在每种情况下进行的优化。当您的应用程序要为许多不同的产品
访问product.category
时,这样的批处理很有用,因此您可以从类别中选择一个...
查询执行,而不是其中的N个。
但是,如果您的应用程序为一个产品
实例访问product.category
时,不太可能访问同一会话中其他产品
实例的类别
字段怎么办?如果您为该关联启用了@BatchSize
,那么您只是将许多其他类别
实例加载到会话中而没有任何收益-它们永远不会被使用。
我不会直接回答你的问题,但我会回答一个更一般的问题,可能是“我已经找到了对我来说更快的方法,为什么不把它应用到任何地方呢?”
简单的回答是:你不应该做先发制人的优化。
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的问题。上