hibernate的 lazy 和 fetch 一般怎么配置
2015-06-15 15:42
381 查看
fetch 和 lazy 配置用于数据的查询 lazy 参数值常见有 false 和 true,Hibernate3 映射文件中默认lazy = true ; fetch 指定了关联对象抓取的方式,参数值常见是select和join,默认是select, select方式先查询主对象,再根据关联外键,每一个对象发一个select查询,获取关联的对象,形成了n+1次查询;而join方式,是left outer join查询,主对象和关联对象用一句外键关联的sql同时查询出来,不会形成多次查询。 在映射文件中,不同的组合会使用不同的查询: 1、lazy=true fetch = select ,使用延迟策略,开始只查询出主对象,关联对象不会查询,只有当用到的时候才会发出sql语句去查询 ; 2、lazy=false fetch = select ,没有用延迟策略,同时查询出主对象和关联对象,产生1+n条sql. 3、lazy=true或lazy=false fetch = join,延迟都不会作用,因为采用的是外连接查询,同时把主对象和关联对象都查询出来了. 配置还是缺乏灵活性的,开发中常会有不同的需求,所以在配置中选择默认值,在具体业务中来指定策略。再者对数据库的操作都是使用SQL来执行的,掌握了sql执行性能反过来看这些配置也许很容易了。
当前台传过一个对象中的对象,在后台不能将该对象设置进去的时候,可能就是这个fetch lazy设置的问题
可以先把该对象中的对象里的子对象get一遍(不能get ID,getId无效),再清除下缓存session.clear()即可
注:get一遍后hibernate会从数据库查询该对象,而不是用缓存对象
相关文章推荐
- CSS清浮动处理(Clear与BFC)
- Json学习笔记之Json语法
- Js初学笔记之<创建对象的五种方式>
- Javascript Error: 11233 Content-Length mismatch
- JSP(4)----servlet编程2
- js中屏蔽a标签右键中在新窗口打开功能
- Javascript 检测键盘按键信息及键码值对应介绍
- jquery禁用右键、文本选择功能、复制按键的实现
- JS知识点
- jQuery开发之选择器二
- 后台调用js
- StringBuffer中的flush()方法作用
- jQuery事件
- 剑指offer—第三章高质量代码(合并两个排序链表)
- JSON实战案例--使用JSON进行数据交换实例
- css3做的圆特效
- Json日期转换误差
- 又一个前端的小渣渣诞生了
- 前端调试技巧
- 一只在读iOS菜鸟十个月来从零基础到拿到实习Offer的总结