鹰翔宇空
学习和生活
BlogJava
首页
新随笔
联系
聚合
管理
110 Posts :: 141 Stories :: 315 Comments :: 1 Trackbacks
公告
欢迎和大家成为朋友!
欢迎和大家就任何技术进行交流!
QQ:77542728
MSN:hnlyhyq@hotmail.com
Email:hnlyhyq@163.com
常用链接
我的随笔
我的评论
我的参与
最新评论
留言簿
(16)
给我留言
查看公开留言
查看私人留言
随笔分类
(107)
休闲娱乐(4)
学习体会(40)
工作之余(7)
心情驿站(15)
技术文摘(41)
生活百科
随笔档案
(109)
2013年1月 (1)
2009年4月 (1)
2008年7月 (1)
2008年6月 (2)
2008年4月 (1)
2008年3月 (3)
2007年9月 (3)
2007年6月 (1)
2006年11月 (7)
2006年10月 (1)
2006年9月 (3)
2006年8月 (1)
2006年7月 (2)
2006年5月 (10)
2006年4月 (12)
2006年3月 (15)
2006年2月 (24)
2006年1月 (12)
2005年12月 (6)
2005年11月 (3)
文章分类
(145)
AJAX(4)
datebase(29)
EJB(4)
hibernate(13)
IDE(5)
java(35)
javascript(4)
jboss_seam
opensource(7)
Spring(3)
web(20)
webwork
工作之余(1)
技术文摘(20)
生活感悟
文章档案
(141)
2007年2月 (4)
2006年9月 (1)
2006年8月 (1)
2006年7月 (4)
2006年6月 (7)
2006年5月 (31)
2006年4月 (7)
2006年3月 (2)
2006年2月 (60)
2006年1月 (24)
收藏夹
(22)
AJAX(8)
java(7)
javascript
JDBC(4)
web(1)
开源项目(2)
java
javascript
jdbc
neweagle的Blog
主要是数据库方面的一些知识
web
其它
开源项目
ant简单应用
关于ant简单应用的
我的好友
lizongbo(蝙蝠太极)
lizongbo的BLOG
张智辉
最新随笔
1. Linux上安装MQ7.5
2. Oracle to buy sun
3. ORACLE查询表方法
4. 本地化(国际化)rich:calendar控件
5. 使用Richface通过js脚本直接局部刷新
6. jboss seam 常用控件
7. jboss seam 组件驱动的事件
8. 多线程-synchronized
9. jboss_seam初学入门建议
10. 如何使用java动态创建ODBC数据源
搜索
最新评论
1. re: 使用javamail发信过程中的一些问题及解决方法
@痞子z
大哥求解,
--手动阀
2. re: 使用javamail发信过程中的一些问题及解决方法
刚做了一个 发送企业邮箱的,有什么不明白的可以咨询我:qq 775048682,欢迎大家交流
--林仔youyou
3. re: 使用javamail发信过程中的一些问题及解决方法
评论内容较长,点击标题查看
--林仔youyou
4. re: 用java调用oracle存储过程总结
学习了
--bean先森
5. re: 用java调用oracle存储过程总结
SB一个 不解释@ice
--iversion
阅读排行榜
1. 用java调用oracle存储过程总结(86482)
2. 使用javamail发信过程中的一些问题及解决方法(75344)
3. MySql常用命令总结(12374)
4. java中数值计算的精度问题(10501)
5. 如何避免不小心关掉web浏览器窗口(7066)
评论排行榜
1. 用java调用oracle存储过程总结(100)
2. 使用javamail发信过程中的一些问题及解决方法(36)
3. 使用Richface通过js脚本直接局部刷新(11)
4. 项目开发成功与失败的关键影响因素----时间篇(11)
5. java中数值计算的精度问题(9)
Hibernate中的延迟加载
原文引自:
http://forum.javaeye.com/viewtopic.php?t=18128
众所周知,到了Hibernate3.0以后,关联关系的对象默认都是使用延迟加载,例如<one-to-many>时.但我在映射<one-to-one>,<many-to-one>关系时指定了lazy="true",但是在查询对象时,我只想查询一个对象,仍然会把这个对象所关联的<one-to-one>,<many-to-one>对象一起查询出来,这样造成了极大的性能浪费.在不指定lazy属性时,<many-to-one>所关联的对象反而会延迟加载,这让我大为困惑,还以为是Hibernate的bug.
在网上查找资料,说在为了延迟加载<one-to-one>,<many-to-one>所关联的对象,需要设置被关联的对象<class name="" lazy="true">,我也这样做了,但是仍然没有效果.
仔细阅读了Hibernate的手册,才发现原来要延迟加载<one-to-one>,<many-to-one>所关联的对象时,除了要指定lazy="true"外,还需要运行期字节码增强,而我省去了这一步,所以延迟加载没有效果.同时还发现在默认情况下,<one-to-one>,<many-to-one>的lazy属性是"proxy"而不是"true"!因此如果直接采用lazy的默认值,是可以延迟加载的.
总结一下:
<many-to-one>默认的属性是lazy="proxy",此时默认是会延迟加载的.在指定了lazy="true"之后,必须要经过运行期字节码增加,延迟加载才有效果.
而<one-to-one>相对要复杂一点,延迟加载还要受到constrained属性的限制.constrained="false"时表明实体和被关联到的实体的约束不是强制的,即存在一个实体时,它通过<one-to-one>关联的实体可能存在,也可能不存在,这时在查询实体时,Hibernate总会发起一次查询检查<one-to-one>所关联的实体是否存在,而这时已经可以把one-to-one关联的实体查询出来了,因此在<one-to-one>关系中,如果constrained="false",总是会立即加载关联到的实体.
如果当constrained="true",且lazy="proxy"(默认),是可以延迟加载的.
如果当constrained="true",且lazy="true"时,需要经过运行期字节码增加,延迟加载才会奏效.
但是这里我还是有个疑问,既然在lazy="proxy"时,已经实现了延迟加载的效果,为什么在lazy="true"时,还需要动态字节码增强才能实现延迟加载呢?
Re: Hibernate中的延迟加载
以后在one-to-one或many-to-one中不会再有lazy="true"了,你可以理解成no-proxy.
[1]起码还是好的方向: 默认就可以lazy了. 而且来了extra :)
[2]写Hibernate的哥们也是要活命的嘛, 不改变怎么来的咨询费, 不过Hibernate的migration写的也还不错.
[3]constrained如你所说, 而且我估计这个属性以后不会有太大变更.
hope that helps :)
regards
posted on 2006-02-10 09:47
TrampEagle
阅读(2817)
评论(1)
编辑
收藏
所属分类:
hibernate
Feedback
#
re: Hibernate中的延迟加载
2008-11-18 11:07
ccc
cccc
回复
更多评论
新用户注册
刷新评论列表
只有注册用户
登录
后才能发表评论。
网站导航:
博客园
IT新闻
知识库
C++博客
博问
管理
相关文章:
一个HibernateUitl的类
Hibernate Annotations 实战
Hibernate 3 Formulas(翻译)
为domain object注入依赖
使用UserType来持久化复合类型属性
OpenSessionInView会不会影响性能?
Hibernate中的延迟加载
使用JDBC和Hibernate来写入Blob型数据到Oracle中
应用Hibernate3的DetachedCriteria实现分页查询
Hibernate源码分析---数据库连接池
Powered by:
BlogJava
Copyright © TrampEagle