加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java – 为什么我不会在每个懒惰加载的关系中使用@BatchSize?

发布时间:2020-12-14 17:44:38 所属栏目:Java 来源:网络整理
导读:hibernate的@BatchSize注释允许批量获取延迟加载的实体.例如.如果我有这样的东西: public class Product { @OneToMany(fetchType=LAZY) @BatchSize(size=10) private ProductCategory category;} 现在,如果我得到一个产品的类别,Hibernate将获取最多十个产
hibernate的@BatchSize注释允许批量获取延迟加载的实体.例如.如果我有这样的东西:
public class Product {


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

}

现在,如果我得到一个产品的类别,Hibernate将获取最多十个产品的类别,这些产品在当前会话中,还没有将它们的类别字段初始化.这样可以节省大量SQL调用数据库.到现在为止还挺好.现在我不知道为什么我不会使用@BatchSize注释在每一个懒惰的关系?毕竟为什么要额外拨打数据库?显然必须有一个理由,否则Hibernate的家伙可能会把它作为默认,但是我目前看不到它.

解决方法

我不会直接回答你的问题,但我会回答一个更通用的问题,可能是“我发现了一些对我来说更快的东西,为什么不应用到处?

简短的答案是:你不应该做先发优化.

hibernate是一个很棒的ORM,允许进行各种优化.您应该测量导致问题的所有进程(经典的N+1即使是快速,任何缓慢的进程等),并进行优化来解决问题.

您可能希望通过加载某些属性获得更好的性能,因为您始终使用它们,因此您可能需要一个BatchSize为100,因为您知道这是关于该属性的关系数.

最终,你不应该关心优化,除非你需要关心它.当您完成测量并发现问题时,您需要关心.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读