我在一些旧代码中发现了奇怪的事情(至少对我而言)。
@ManyToOne带注释的字段也用注释@BatchSize。
@ManyToOne
@BatchSize
我一直以为@BatchSize注释仅在类级别或集合(@OneToMany)上进行注释时才受影响,而在迭代时则影响 预取 。
@OneToMany
但是,也许我错了,并标注@ManyToOne与@BatchSize影响的东西。我在文档中找不到答案。
是否标注@ManyToOne有@BatchSize有感觉?
@ManyToOne``@BatchSize仅当相应字段标记为lazy(lazy=true)时,与关联的内容才有意义。
@ManyToOne``@BatchSize
lazy
lazy=true
的确,如果该字段不是lazy,则根据定义,由于装入了实体,因此该字段已经被加载,因此数据库调用的问题不适用。
想象一下一个Person类,其中有一个ShoesPair元素集合(ShoesPair.class),并且其中一个owner字段被标记为惰性字段(由于是可选字段,因此在检索特定的鞋子时并没有带来重要的信息)。
Person
ShoesPair
owner
一个人想要遍历 25 双鞋(25个ShoesPair对象)以找回它们的所有者。
如果该owner字段(对应一个人)仅用注释@ManyToOne,则数据库中将有 25个 选择。
但是,如果用注释@BatchSize(size=5),将只有 5个 调用,因此可以提高性能。
@BatchSize(size=5)
从Hibernate文档中可以看出,批处理大小不仅适用于集合:
您还 可以 启用集合的批量提取。
Hibenate特别提到了一些@OneToMany案例,因为在90%的案例中,这些字段都标记为lazy。