5

我喜欢EclipseLink的一件事是有一个很棒的东西,称为批处理查询提示,我还没有找到与之对应的 Hibernate。

基本上,做一大堆连接会很快变得一团糟,你最终查询的数据比你想要的要多(请记住,如果你将人员连接到 6 个地址,则人员信息将返回 6 次;现在继续将其乘以额外的连接) .

想象一个 Person 实体,它具有 0:M 的 Address、Email、Phone 和 OrderHistory 集合。加入所有不好但使用批处理方法:

List persons = entityManager.createQuery("select p from Person p"
  .setHint(QueryHints.BATCH, "p.address")
  .setHint(QueryHints.BATCH, "p.email")
  .setHint(QueryHints.BATCH, "p.phone")
  .setHint(QueryHints.BATCH, "p.orderHistory")
  .getResultList();

这将对 Person 表进行查询,仅此而已。当您第一次访问地址记录时,它将对整个地址表进行一次查询。如果您在 Person 表上指定了 where 子句,则同样的条件也将用于 Address 加载。

所以不是做 1 个查询,而是做 5 个。

如果您使用连接来执行此操作,您可能会在一个查询中获得所有信息,但由于连接,您很可能会加载更多数据。

无论如何,我已经在 Hibernate 文档中寻找与此等效的文档,但没有看到。有吗?

4

2 回答 2

5

没有一个。

于 2009-01-26T08:14:25.520 回答
0

我知道有两件事可能会有所帮助:

1)hibernate.default_batch_fetch_size

2) Criteria.setFetchMode 和 Criteria.setFetchSize

于 2009-01-22T00:43:12.807 回答