【问题标题】:Hibernate equivalent to EclipseLink's batch query hint?Hibernate 相当于 EclipseLink 的批量查询提示?
【发布时间】: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


    【解决方案1】:

    没有。

    【讨论】:

      【解决方案2】:

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

      1) hibernate.default_batch_fetch_size

      2) Criteria.setFetchMode 和 Criteria.setFetchSize

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2017-05-15
        • 1970-01-01
        • 1970-01-01
        • 2013-07-23
        • 1970-01-01
        • 2016-08-12
        • 2015-05-10
        相关资源
        最近更新 更多