

如果您无法下载资料,请参考说明:
1、部分资料下载需要金币,请确保您的账户上有足够的金币
2、已购买过的文档,再次下载不重复扣费
3、资料包下载后请先用软件解压,在使用对应软件打开
Hibernate检索策略 Hibernate的检索策略分三种: 立即检索 就是在检索数据时立即返回实际需要的数据,在hibernate中处于性能的考虑默认不使用立即检索,只有当映射文件中指定lazy=”false”时才使用立即检索策略。如: <setname=”orders”laxy=”false”/> 延迟加载 就是在检索数据时并不会返回实际的数据,只是返回一个代理对象,在真正使用这些数据时才从数据库中加载。配置:lazy=”true”时才进行延迟加载,在hibernate中默认都使用延迟加载。 预先抓取 和立即加载一样都是在检索数据时立即返回实际需要的数据,它以外连接的形式查询数据库,配置:fetch=”join”时预先加载 检索策略在关联关系中的应用 在hibernate3中类和集合的lazy属性值默认为true(延迟加载) 多对一 在hibernate中默认的检索方式:延迟加载,抓取方式为select 对于多对一和一对一的关联关系,应该优先考虑使用预先抓取的策略,它比立即检索使用的select语句少,可以提高性能(但也要视具体情况而定) 例:order对象和member对象(多对一关联) Order.hbm.xml的<many-to-one>节点的fetch属性Order.hbm.xml的<many-to-one>节点的lazy属性Member.hbm.xml的<class>节点的lazy属性检索策略/False/立即检索/ProxyTrue延迟加载Join/False预先抓取无无False预先抓取Select/False立即检索“/”表示任意 一对一 在一对一的关联中使用哪种检索策略都可以, 主对象默认使用的预先加载 从对象默认使用的预先加载 例:member对象和idcard对象(一对一关联) Member.hbm.xml的<one-to-one>节点的fetch属性Member.hbm.xml的<one-to-one>节点的constrained属性IDCard.hbm.xml的<class>节点的lazy属性检索策略/True无延迟加载JoinFalse/预先加载无无无预先加载Select//立即检索一对一关联中的延迟加载: 要设置<one-to-one>节点的constrained属性值为”true”,且必须设置关联端的<class>节点的lazy属性值为true,因为constrained=”false”时表明实体与被关联的实体的约束不是强制的,既存在一个Member对象时,关联的IdCard对象可能存在也可能不存在,所以在查询Member对象时,hibernate会先查询一次所关联的实体是否存在,而这时关联的实体已经查询出来。所以要进行延迟加载必须设置constrained=”true”. 在<one-to-one>、<many-to-one>的一对一关联中,主对象(<one-to-one>)的property-ref属性不配置并配置constrained="true"-------延迟加载 从对象默认进行延迟加载 多对多/一对多 在一对多或多对多关联中应该首先考虑使用延迟加载 在一对多关联中默认的使用延迟加载、抓取方式为select 多对一关联中set属性的设置: Fetch属性Lazy属性检索策略Join/预先抓取SelectFalse立即检索SelectTrue延迟加载

ys****39
实名认证
内容提供者


最近下载