Hibernate FetchType EAGER与Root fetch()不同?
我正在使用JPA2CriteriaBuilder构建一个查询,使用Hibernate4作为我的提供者。我一直在玩弄FetchModes,并得出结论,SELECT就是我所需要的。但是选择强制启用FetchType.LAZY。我在某个地方读到这篇文章,似乎就是这样 在Devices类中,此配置产生正确的结果:Hibernate FetchType EAGER与Root fetch()不同?,hibernate,criteria-api,Hibernate,Criteria Api,我正在使用JPA2CriteriaBuilder构建一个查询,使用Hibernate4作为我的提供者。我一直在玩弄FetchModes,并得出结论,SELECT就是我所需要的。但是选择强制启用FetchType.LAZY。我在某个地方读到这篇文章,似乎就是这样 在Devices类中,此配置产生正确的结果: @Fetch(value=FetchMode.SELECT) @OneToMany(fetch=FetchType.EAGER, mappedBy = "device") public Lis
@Fetch(value=FetchMode.SELECT)
@OneToMany(fetch=FetchType.EAGER, mappedBy = "device")
public List<DevInterfaces> getDevInterfaces() {
return this.devInterfaces;
}
@Fetch(value=FetchMode.SELECT)
@OneToMany(fetch=FetchType.EAGER,mappedBy=“设备”)
公共列表getDeviceInterfaces(){
返回这个.devInterfaces;
}
但是,我不希望在实体中硬编码FetchType=EAGER。我想控制提取的时间,我想我可以用fetch()这样做:
CriteriaBuilder cb = em.getCriteriaBuilder();
CriteriaQuery<Devices> dq = cb.createQuery(Devices.class);
Root<Devices> dev = dq.from(Devices.class);
dev.fetch(Devices_.devInterfaces)
CriteriaBuilder cb=em.getCriteriaBuilder();
CriteriaQuery dq=cb.createQuery(Devices.class);
Root dev=dq.from(Devices.class);
dev.fetch(设备\设备接口)
但结果是内部连接,我不希望这样
如何使用FetchMode进行提取。选择而不使用硬编码FetchType.EAGER?如前所述,并且如文档所述,
fetch
使用内部联接
当使用重载的fetch方法时,可以指定连接类型,该方法还将以下内容作为参数:
dev.fetch(Devices_.devInterfaces, JoinType.LEFT)
如前所述,也如文档所述,
fetch
使用内部联接
当使用重载的fetch方法时,可以指定连接类型,该方法还将以下内容作为参数:
dev.fetch(Devices_.devInterfaces, JoinType.LEFT)