小编典典

@ManyToOne和@BatchSize

hibernate

我在一些旧代码中发现了奇怪的事情(至少对我而言)。

@ManyToOne带注释的字段也用注释@BatchSize

我一直以为@BatchSize注释仅在类级别或集合(@OneToMany)上进行注释时才受影响,而在迭代时则影响 预取

但是,也许我错了,并标注@ManyToOne@BatchSize影响的东西。我在文档中找不到答案。

是否标注@ManyToOne@BatchSize有感觉?


阅读 348

收藏
2020-06-20

共1个答案

小编典典

@ManyToOne``@BatchSize仅当相应字段标记为lazylazy=true)时,与关联的内容才有意义。

的确,如果该字段不是lazy,则根据定义,由于装入了实体,因此该字段已经被加载,因此数据库调用的问题不适用。

想象一下一个Person类,其中有一个ShoesPair元素集合(ShoesPair.class),并且其中一个owner字段被标记为惰性字段(由于是可选字段,因此在检索特定的鞋子时并没有带来重要的信息)。

一个人想要遍历 25 双鞋(25个ShoesPair对象)以找回它们的所有者。

如果该owner字段(对应一个人)仅用注释@ManyToOne,则数据库中将有 25个 选择。

但是,如果用注释@BatchSize(size=5),将只有 5个 调用,因此可以提高性能。

Hibernate文档中可以看出,批处理大小不仅适用于集合:

您还 可以 启用集合的批量提取。

Hibenate特别提到了一些@OneToMany案例,因为在90%的案例中,这些字段都标记为lazy

2020-06-20