0

实体A有两个单向和惰性的一对一关系B(即没有反向关系)。

@OneToOne(fetch = FetchType.LAZY, cascade = CascadeType.ALL, optional = false)
@JoinColumn(name = "first_b_id")
private B firstB;

@OneToOne(fetch = FetchType.LAZY, cascade = CascadeType.ALL, optional = false)
@JoinColumn(name = "second_b_id")
private B secondB;

延迟加载工作正常。但是如果我调用

myA.getSecondB()

SQL 日志显示 Hibernate 发出类似的问题

select * from B where id in (value1, value2)

因此,关系被懒惰地处理,但它们都是一次加载的。对此有何解释和解决方法?

哦,您可能会问,为什么这如此重要……嗯,B实体是 LOB。一个是5+MB的原版,另一个是200KB的“预览版”。当然,如果绝对必要,我只想加载原件。

4

1 回答 1

1

解释可能是您为 B 类(或使用配置属性的每个实体)启用了批量获取。hibernate.default_batch_fetch_size

于 2012-12-08T19:09:16.443 回答