批处理提取在EclipseLink中不起作用

时间:2014-08-19 12:44:58

标签: eclipselink

考虑这个简单的关联:

@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注释,这些方法都没有起作用。

1 个答案:

答案 0 :(得分:3)

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

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

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