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

前端之家收集整理的这篇文章主要介绍了java – 为什么我不会在每个懒惰加载的关系中使用@BatchSize?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
hibernate的@BatchSize注释允许批量获取延迟加载的实体.例如.如果我有这样的东西:
public class Product {


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

}

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

解决方法

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

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

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

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

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

原文链接:https://www.f2er.com/java/124023.html

猜你在找的Java相关文章