在正式说hibernate延迟加载时,先说说一个比较奇怪的现象吧:hibernate中,在many-to-one时,如果我们设置了延迟加载,会发现我们在eclipse的调试框中查看one对应对象时,它的内部成员变量全是null的(因为这个原因我还调了好久的代码!),贴张图给你们感受下:
左边是设置延迟加载的调试图,右边是没设置延迟加载的示意图;
ok,估计大家也理解我说什么了,下面就从这个现象进作为入口,阐述hibernate延迟加载背后的原理----动态代理。
一、hibernate的延迟加载与动态代理
1、hibernate中的延迟加载:get VS load
我们知道,在hibernate方法中,直接涉及到延迟加载的方法有get和load,使用get时,不会延迟加载,load则反之。另外,在many-to-one等关系配置中,我们也可以通过lazy属性设置是否延迟加载,这是我们对hibernate最直观的认识。
2、现象解释----动态代理机制