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



