高密哪里做网站好,网页版梦幻西游哪个职业厉害,网站开发怎么找客户,app开发流程 网站开发在Hibernate框架中#xff0c;当我们要访问的数据量过大时#xff0c;明显用缓存不太合适#xff0c; 因为内存容量有限 #xff0c;为了减少并发量#xff0c;减少系统资源的消耗#xff0c;这时Hibernate用懒加载机制来弥补这种缺陷#xff0c;但是这只是弥补而不是用… 在Hibernate框架中当我们要访问的数据量过大时明显用缓存不太合适 因为内存容量有限 为了减少并发量减少系统资源的消耗这时Hibernate用懒加载机制来弥补这种缺陷但是这只是弥补而不是用了懒加载总体性能就提高了。 我们所说的懒加载也被称为延迟加载它在查询的时候不会立刻访问数据库而是返回代理对象当真正去使用对象的时候才会访问数据库。 实现懒加载的前提: 1 实体类不能是final的 2 能实现懒加载的对象都是被CGLIB反射调用改写的代理对象,所以不能是final修饰的 3 须要asm,cglib两个jar包 4 相应的lazy属性为true 5 相应的fetch属性为select 下面几种可以实现懒加载功能 1、 通过Session.load()实现懒加载 load(Object, Serializable)根据id查询 。查询返回的是代理对象不会立刻访问数据库是懒加载的。当真正去使用对象的时候才会访问数据库。 用load()的时候会发现不会打印出查询语句而使用get()的时候会打印出查询语句。 使用load()时如果在session关闭之后再查询此对象会报异常could not initialize proxy – no Session。处理办法在session关闭之前初始化一下查询出来的对象Hibernate.initialize(user); 使用load()可以提高效率因为刚开始的时候并没有查询数据库。但很少使用。 2、one-to-one(元素)懒加载 懒加载默认是关闭的只有基于外键关联方式的“一对一”才用懒加载。必需同时满足下面三个条件时才能实现懒加载 (主表不能有constrainedtrue,所以主表没有懒加载) lazy!false 2)constrainedtrue 3)fetchselect 3、one-to-many (元素)懒加载 当我们查询的是主对象时将person和idcard外连接查询出person对象和idcard对象没有懒加载。当我们查询的是从对象时对于idcard所关联的person对象是懒加载。 这种关联方实质性懒加载是非常有效的Hibernate默认对它就是使用懒加载的默认就是以下条件 1)lazy!false 2)fetchselect 4、 many-to-one元素实现了懒加载。 多对一的时候查询主对象时默认是懒加载。即查询主对象的时候不会把从对象查询出来。 多对一的时候查询从对象时默认是懒加载。即查询从对象的时候不会把主对象查询出来。 hibernate3.0中lazy有三个值truefalseproxy,默认的是lazy”proxy”.具体设置成什么要看你的需求并不是说哪个设置就是最好的。在many-to-one与one-to-one标签上:当为true时,会有懒加载特性,当为false时会产生N1问题,比如一个学生对应一个班级,用一条SQL查出10个学生,当访问学生的班级属性时Hibernate会再产生10条SQL分别查出每个学生对应的班级. lazy 什么时候捉取 fetch 捉取方式:select关联查询;join连接表的方式查询(效率高) fetchjoin时,lazy的设置将没有意义. .5、many-to-many (元素) 这种关联方实质性懒加载是非常有效的Hibernate默认对它就是使用懒加载的默认就是以下条件 1)lazy!false 2)fetchselect 6、.能够懒加载的对象都是被改写过的代理对象当相关联的session没有关闭时访问这些懒加载对象代理对象的属性getId和getClass除外hibernate会初始化这些代理或用Hibernate.initialize(proxy)来初始化代理对象当相关联的session关闭后再访问懒加载的对象将出现异常。 7、抓取策略 a) select作为默认值它的策略是当需要使用到关联对象的数据时另外单独发送select语句抓取当前对象的关联对象的数据。即懒加载。 b) join他的策略时使用一条select语句用内连接来获取对象的数据和关联对象的数据此时关联对象的懒加载失效。 除了上面说的在映射文件中配置lazyfalse之外我们还可以通过以下方式来解决懒加载问题。 1.明确初始化 在session还没有关闭时访问一次xxxx.getXxx()强制访问数据库。或者Hibernate.initialize(xxx) 2.openSessionView 这个往往需要过滤器配合使用 3.在ssh中可以实现在service层标注方式来解决懒加载。 本文地址http://www.blogfshare.com/hibernate-lazy.html