考虑这个简单的关联:
@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
注释,这些方法都没有起作用。
答案 0 :(得分:3)
批量提取提示告诉EclipseLink在获取关系时使用批处理,但不会影响何时获取。因为关系被标记为惰性,它仍然等待访问关系,但是当它关闭时,它将使用批量查询返回通过初始查询引入的所有Employee的所有关联实体。加入提取是立即的,因为信息是通过初始查询引入的,因此将间接放入其间没有任何价值。
如果您想立即加载关系,请使用
query.setHint(QueryHints.LOAD_GROUP_ATTRIBUTE, "addresses");