一个我喜欢 EclipseLink 有这个伟大的东西叫做 批查询提示, 我还没有找到一个休眠等。

基本上在做一大堆的联接就会变得混乱真正的快和你结束了查询的方式更多的数据比你一定要(记住,如果你加入的人到6个地址的人的信息返回6倍;现在保持相乘得出的额外的加入).

想象一下,一个人实体的0:M集的地址、电子邮件、电话和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();

这将做一个查询人表,就是这样。当你第一次访问一个地址记录,它将做一个 单一的查询整个 地址表。如果你指定其条款的人表,这个相同的标准将使用的地址的负载。

所以不是这样做的1询,你做5.

如果你这样做有加入你 可能会 得到它所在的一种查询,但是你很可能是装的方式更多的数据,因为联接。

无论如何,我已经找于休眠docs为一个相当于这一点,但没有看到一个。是有一个吗?

有帮助吗?

解决方案

没有一个。

其他提示

有两件事情我知道这可能有帮助:

1) hibernate.default_batch_fetch_size

2)标准。setFetchMode和标准。setFetchSize

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top