【问题标题】:JPA OneToMany and Getting children with a single queryJPA OneToMany 和通过单个查询获取孩子
【发布时间】:2013-05-01 17:47:45
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: performance hibernate jpa


    【解决方案1】:

    除了自己做查询,你可以简单地启用批量获取,如the documentation中所述:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-01-01
      • 1970-01-01
      • 2020-06-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多