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
Hibernate 动态延迟加载对象不起作用_Hibernate - Fatal编程技术网

Hibernate 动态延迟加载对象不起作用

Hibernate 动态延迟加载对象不起作用,hibernate,Hibernate,我在我的项目中使用spring+hibernate;我有两个类提醒和客户 在课堂提醒中,我为客户端添加了一个多对一的关系,默认情况下,它是热切加载的。在我的项目中的大多数场景中,我都需要这个对象图,所以我在提醒类中为客户机设置了fetch类型 Class Reminder { @ManyToOne Client client; } 但是对于一两个场景,我想让这个对象客户机的初始化保持惰性 所以我添加了如下获取提醒的方法 Criteria c = session.createCr

我在我的项目中使用spring+hibernate;我有两个类
提醒
客户
在课堂提醒中,我为客户端添加了一个多对一的关系,默认情况下,它是热切加载的。在我的项目中的大多数场景中,我都需要这个对象图,所以我在提醒类中为客户机设置了fetch类型

Class Reminder {
    @ManyToOne
    Client client;
}
但是对于一两个场景,我想让这个对象客户机的初始化保持惰性

所以我添加了如下获取提醒的方法

Criteria c = session.createCriteria();
c.setFetchMode("client", FetchMode.SELECT); 
hibernateTemplate.findByCriteria(criteria);
它不起作用;它仍然加载带有提醒的客户端对象

而反向(从懒惰到渴望)在api文档中运行良好

公共静态最终获取模式选择

Fetch eagerly, using a separate select. Equivalent to fetch="select"

好吧,如果映射被标记为惰性,您可以使用条件或HQL查询急切地获取,但您不能做相反的事情:如果映射被标记为急切地获取,那么它将始终被急切地获取。

我认为您不能对可能为null(多对一,一对一)的单端关联进行延迟加载。Hibernate3支持使用一些字节码来延迟加载单个字段

来自JBoss wiki:

在和映射上使用
lazy=“true”
on可以延迟加载单个标量值类型的属性(这种情况有些奇怪)。需要编译的持久类的字节码插装,以注入拦截代码。可以在HQL中使用FETCH ALL属性重写

对单值关联使用
lazy=“no proxy”
,以便在不使用代理的情况下启用延迟获取。需要字节码指令插入拦截代码


谢谢。

谢谢您的回复;但我在网上发现FetchMode.Select的api文档是错误的;它延迟抓取文档是正确的,抓取意味着我们如何加载数据,而延迟的对/错则是我们是否加载数据。谢谢,但这也不是为了一个多月的关联;我试过了;它不工作,你能不能给我一些字节码的例子代码,让我看看这个链接。