栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

@BatchSize是聪明还是愚蠢的使用?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

@BatchSize是聪明还是愚蠢的使用?

  1. 是的,
    @BatchSize
    旨在与惰性关联一起使用。
  2. 即使未初始化的代理/集合的数量小于指定的批处理大小,Hibernate仍将在大多数情况下执行多个语句。此外,与较小的查询相比,较小的查询可以对系统的整体吞吐量产生积极的影响。
  3. @BatchSize
    在类级别上,表示实体的指定批处理大小将应用于
    @*ToOne
    与该实体的所有惰性关联。请参阅文档中有关
    Person
    实体的示例。

您提供的链接问题/答案通常更关心优化和延迟加载的需求。它们当然也适用于此,但是它们不仅与批量加载有关,这只是可能的方法之一。

另一个重要的问题与链接加载中提到的预加载有关,这表明如果始终使用属性,则通过使用预加载可能会获得更好的性能。通常对于收藏夹而言 并非如此
,在许多情况下对于一对一关联也是如此。

例如,假设您具有以下实体,

bs
并且
cs
在使用时 始终 使用该实体
A

public class A {  @oneToMany  private Collection<B> bs;  @oneToMany  private Collection<C> cs;}

如果您不将它们加入单个查询中,那么渴望加载

bs
并且
cs
显然会遭受N + 1选择问题。但是,如果您将它们加入单个查询中,例如:

select a from A  left join fetch a.bs  left join fetch a.cs

然后创建 完整的笛卡尔乘积 之间

bs
以及
cs
和返回
count(a.bs) x count(a.cs)
结果集行
对每个
a
被逐个读取并组装成的实体
A
和他们的收藏
bs
cs

批量抓取是非常优化在这种情况下,因为你会先看

A
S,然后
bs
,然后
cs
,导致更多的查询,但与从数据库转移总量少得多的数据量。而且,单独的查询比带有连接的大型查询要简单得多,并且数据库更易于执行和优化。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/388166.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号