gpt4 book ai didi

java - 为什么我不在每个惰性加载关系上都使用@BatchSize?

转载 作者:搜寻专家 更新时间:2023-10-30 21:01:12 24 4
gpt4 key购买 nike

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

public class Product {


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

}

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

最佳答案

我不会直接回答您的问题,但我会回答一个更笼统的问题,它可能是“我找到了对我来说效果更快的方法,为什么不在所有地方应用它?”

简短的回答是:您不应该进行抢先优化。

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

你可能会通过预先加载一些属性获得更好的性能,因为你总是使用它们,你可能需要为其他一些属性设置 100 的 BatchSize,因为你知道它与你拥有的关系数有关该属性。

最终,除非您需要关心它,否则您不应该关心优化。当您完成测量并发现问题时,您需要注意。

关于java - 为什么我不在每个惰性加载关系上都使用@BatchSize?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17420700/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com