我使用 ehcache 和休眠 3.6.7 Final。这是一个伪代码示例,揭示了缓存问题。
@Cache(usage = CacheConcurrencyStrategy.READ_WRITE)
public class A{
long id;
@OneToMany(mappedBy = "aId", targetEntity = B.class, fetch = FetchType.LAZY)
@Fetch(value = FetchMode.JOIN)
@Cache(usage = CacheConcurrencyStrategy.READ_WRITE)
protected Set<B> fieldB;
}
@Cache(usage = CacheConcurrencyStrategy.READ_WRITE)
public class B {
long id;
long bId;
}
1)当我第一次从休眠加载实体A时,它不会读取字段B。这没关系 - 因为 FetchType.LAZY 已设置。
2)第二次加载实体 AI 时,看到 sql 查询检索实体 A JOIN 实体 B。
3)如果删除@Fetch(value = FetchMode.JOIN)点2将不会执行。
那么问题是这个错误还是功能?我怎样才能避免这种潜在的事情。