FetchType.EAGER 懒加载失败

来源:互联网 发布:大麦网源码 编辑:程序博客网 时间:2024/05/17 08:26

懒加载失败的原因 , JoinColumn对应的字段"sid"不是SidKnowledge中的主键 , 也不是其中的外键(mysql中对两个表没有做外键关联)

因为questinfo上面没有建立sidknowlege的外健,那这个时候,hibernate去查询你的questinfo,理论上懒加载是需要使用proxy的,需要proxy的情况是,知道每个questinfo都对应了一个sidknowledge对象,但是这个时候,hibernate不知道是不是每一个questinfo都对应于一个sidknowledge,那么这个时候,他就回去查询一次,确定是否有sidknowledge,那么他都去查询一次了,所以这个时候懒加载也就失效了



Hibernate的lazy生效期:

生效期和session一样的,session关闭,lazy失效

hibernate支持lazy策略只有在session打开状态下有效


重点牢记

1.Load支持懒加载,get不支持懒加载。
2.lazy的生命周期与session相同,lazy加载必须依赖于session一直开启。
3.hibernate lazy属性,在3.x后是默认打开的,在以前版本中默认是关闭的。
4.hibernate通过cjlib实现代理。
5.load方法加载出来的是代理对象。
6.可以利用Hibernate.initialize(emp)来初始化代理对象达到命中数据库
7.代理类在未命中数据库之前,他只有真实对象的ID属性,其他数据都是没有的


原创粉丝点击