Hibernate相当于EclipseLink的批量查询提示?

时间:2009-01-21 22:47:21

标签: java hibernate jpa ejb eclipselink

我喜欢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子句,则同样的条件也将用于Address加载。

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

如果您使用连接进行此操作,可能在一个查询中完成所有操作,但由于连接,您可能正在加载更多数据。

无论如何,我已经开始在Hibernate文档中寻找与此相当的东西但却看不到它。有吗?

2 个答案:

答案 0 :(得分:4)

没有一个。

答案 1 :(得分:0)

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

1)hibernate.default_batch_fetch_size

2)Criteria.setFetchMode和Criteria.setFetchSize