Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/asp.net-mvc-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Hibernate FetchType EAGER与Root fetch()不同?_Hibernate_Criteria Api - Fatal编程技术网

Hibernate FetchType EAGER与Root fetch()不同?

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

我正在使用JPA2CriteriaBuilder构建一个查询,使用Hibernate4作为我的提供者。我一直在玩弄FetchModes,并得出结论,SELECT就是我所需要的。但是选择强制启用FetchType.LAZY。我在某个地方读到这篇文章,似乎就是这样

在Devices类中,此配置产生正确的结果:

@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)