1

我注意到在休眠中,它一次查询一个实体的子实体集合。因此,例如,我有一个 Person 实体,它与 PhoneNumber 具有 OneToMany 关系,并且与 EmailAddress 具有 OneToMany 关系。如果我对返回 1,000 人的 Person 实体进行简单查询,那么 hibernate 将对 EmailAddress 进行 1,000 次查询,对 PhoneNumber 进行 1,000 次查询。让我们暂时忘记急切或懒惰的获取,假设我将访问每个人的电话和电子邮件集合。

这似乎是一个幼稚的实现。有没有一种简单的方法来改变它,所以只有 1 个查询到 PhoneNumber,只有 1 个查询到 EmailAddress?这些应该放入由 Person 外键作为键的映射中,以便 Person getter 方法轻松检索它们。

除了在执行 Person 查询之前对会话缓存中的电子邮件和电话号码进行暴力查询之外,还有什么想法吗?

TIA,如果您需要更多数据,请告诉我。

4

1 回答 1

2

除了自己进行查询之外,您可以简单地启用批量获取,如文档中所述

您还可以启用集合的批量获取。例如,如果每个 Person 都有一个 Cats 的惰性集合,并且当前在 Session 中加载了 10 个人,则遍历所有人员将生成 10 个 SELECT,每次调用 getCats() 一个。如果在 Person 的映射中为猫集合启用批量抓取,Hibernate 可以预取集合:

于 2013-05-01T17:52:27.453 回答