【发布时间】:2010-10-02 19:33:40
【问题描述】:
我喜欢EclipseLink 的一个地方是一个很棒的东西,叫做batch query hint,我还没有找到与之对应的 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 子句,则同样的条件也将用于地址加载。
因此,您无需执行 1 次查询,而是执行 5 次。
如果您使用连接来执行此操作,您可能在一个查询中得到所有信息,但您很可能会因为连接而加载更多数据。
无论如何,我已经在 Hibernate 文档中寻找与此等效的文档,但没有看到。有吗?
【问题讨论】:
标签: java hibernate jpa ejb eclipselink