我喜欢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 文档中寻找与此等效的文档,但没有看到。有吗?