我在一些旧代码中发现了奇怪的东西(至少对我而言)。
注解为@ManyToOne
的字段也被注解为@BatchSize
。
我一直认为 @BatchSize
注释只影响在类级别或集合上注释时 (@OneToMany
) 并影响预取 迭代时。
但也许我错了,用 @BatchSize
注释 @ManyToOne
会影响某些事情。我在文档中找不到答案。
用 @BatchSize
注释 @ManyToOne
有意义吗?
最佳答案
我认为这个问题是指在同一字段上组合 @ManyToOne
和 @BatchSize
,例如:
@ManyToOne
@BatchSize(size = 5)
private User owner;
Hibernate 不支持这个用例,至少在使用注解时是这样。 documentation 提到的批量获取的唯一用途是:
- 在集合字段上,即
@OneToMany
或@ManyToMany
(但不是@ManyToOne
)< - 关于要获取的实体类
例如:
@Entity
@BatchSize(size = 5)
public class User {
...
}
后一种情况可以对所有用户类型的关系进行批处理,包括多对一关系。但是,使用实体类上的注释无法逐个字段地控制行为。
在 Hibernate 源代码中搜索 @BatchSize
的所有用法,确认缺乏对您的用法的支持。从我在 AnnotationBinder.java 中看到的,@BatchSize
注释仅在实体类和具有某种 @XxxToMany
注释的字段上进行检查。
关于java - @ManyToOne 和@BatchSize,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13048436/