hibernate JAVA面试时当被问到hibernate中的N+1问题时,应该如何回答? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 怎么解决n +1 问题? 1 )lazy=true, hibernate3开始已经默认是lazy=true了;lazy=true时不会立刻查询关联对象,只有当需要关联对象(访问其属性,非id字段)时才会发生查询动作。 2)二级缓存, 在对象更新,删除,添加相对于查询要少得多时, 二级缓存的应用将不怕n +1 问题,因为即使第一次查询很慢,之后直接缓存命中也是很快的。 不同解决方法,不同的思路,第二条却刚好又利用了n +1 。 3) 当然你也可以设定fetch=join 是1+N问题:解决办法1.fetch=Lazy2.HQL(EJBQL) http://spiritfrog.javaeye.com/blog/197505 使用延迟加载 : Lazy fetch 如:select c from Customer c join fetch c.custextend join fetch c.certificate这样就可以避免N+1次访问数据库的情况 1+N是hibernate里头很经典的问题,就想大概描述一下1+N是什么,然后再回答会引起什么影响,然后再说这个问题应该怎么解决就OK了吧 N+1是指在多对多或多对1的映射时候出现的这么一种情况,hibernate默认情况下,对于many的那一方它从数据库取值的方式是fetchType.eager即把关联的one那一方也取出来,而对一的那方则默认是fetchType.lazy只取自己这个表的值,这样的话对于many的那方有的时候就需要根据实际情况来设定fetchType的值否则就会出现效率为题,一般有三种情况来解决:1设定fetchType为lazy,这样就不会取出对应的那个表的信息,2注解@Bachsize(value=5)这样每次去取一的那方的话就只取5条记录出来。3在HQL语言中用join fetch这样采用表连接的方式取出值就不用发出多条sql语句单独的取另一张表的数据了 参考下,写的很清楚,选自孙卫琴的《精通Hibernate:Java对象持久化技术详解》http://blog.csdn.net/gl74gs48/archive/2010/09/24/5903166.aspx jsp页面如何获得struts2中map的值 struts2.1.6+spring2.5.6整合的问题 struts form的生命周期是什么? 问:大家都用什么报表来做开发呢? 日期一更新,就出现下面错误,请高手指点。 jsp分页出错+校验用户名不存在~! 求助,今天用struts2编写注册界面,出现如下错误,求解决 在struts中如何设计业务层和持久层呢 急:有关cmp的问题(再线等待)? 求救整合ssh时,hibernate不能使用delete()方法,也无法执行删除语句 跪求 JAVA 包!!!急 !!急 hibernate 更新语句!麻烦各位高手了!
1 )lazy=true, hibernate3开始已经默认是lazy=true了;lazy=true时不会立刻查询关联对象,只有当需要关联对象(访问其属性,非id字段)时才会发生查询动作。
2)二级缓存, 在对象更新,删除,添加相对于查询要少得多时, 二级缓存的应用将不怕n +1 问题,因为即使第一次查询很慢,之后直接缓存命中也是很快的。
不同解决方法,不同的思路,第二条却刚好又利用了n +1 。 3) 当然你也可以设定fetch=join
解决办法1.fetch=Lazy
2.HQL(EJBQL)
select c from Customer c join fetch c.custextend join fetch c.certificate
这样就可以避免N+1次访问数据库的情况
http://blog.csdn.net/gl74gs48/archive/2010/09/24/5903166.aspx