【问题标题】:Batch Fetch is not working in EclipseLink批量获取在 EclipseLink 中不起作用
【发布时间】:2014-08-19 12:44:58
【问题描述】:

考虑这个简单的关联:

@Entity
public class Employee
{
    @OneToMany(fetch=FetchType.LAZY)
    private Set<Address> addresses;
}

使用此代码不会在结果中获取地址:

Query query=entityManager.createQuery("select e from Employee e");
query.setHint("eclipselink.batch.type", "JOIN");
query.setHint("eclipselink.batch", "e.addresses");
List list=query.getResultList();

虽然在这一个中获取地址:

Query query=entityManager.createQuery("select e from Employee e");
query.setHint("eclipselink.join-fetch", "e.addresses");
List list=query.getResultList();

为什么第一次批量提取不起作用? 我正在使用 EclipseLink 2.5.1。我还尝试了 @BatchFetch 注释,但这些方法都不起作用。

【问题讨论】:

    标签: eclipselink


    【解决方案1】:

    批量获取提示告诉 EclipseLink 在获取关系时使用批处理,但不影响何时获取。因为关系被标记为惰性,它仍然等待关系被访问,但是当它被访问时,它会使用批处理查询返回所有通过初始查询引入的 Employee 的所有关联实体。 Join fetch 是即时的,因为信息是通过初始查询引入的,因此在两者之间放置间接是没有价值的。

    如果要立即加载关系,请使用

    query.setHint(QueryHints.LOAD_GROUP_ATTRIBUTE, "addresses");
    

    【讨论】:

      猜你喜欢
      • 2015-03-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-05-15
      • 2016-06-03
      • 1970-01-01
      • 2017-03-20
      相关资源
      最近更新 更多